Erreur Routes sur [POST] [Ruby on Rails]
-
27-09-2019 - |
Question
En ce moment, je construis une application de gestion de projet dans des rails, quelques informations de base ici:
En ce moment j'ai 2 modèles, l'un est l'utilisateur et l'autre est client. Les clients et les utilisateurs ont une relation un-à-un (client -> has_one et utilisateur -> belongs_to ce qui signifie que la clé étrangère est dans la table des utilisateurs)
Alors que je suis en train de le faire est une fois que vous ajoutez un client vous pouvez réellement ajouter des informations d'identification (ajouter un utilisateur) à ce client, afin de le faire tous les clients sont affichés avec un lien à côté du nom de ce client ce qui signifie que vous pouvez réellement créer des informations d'identification pour ce client.
Ainsi, afin de faire que j'utilise une aide le lien aide comme ceci.
<%= link_to "Credentials",
{:controller => 'user', :action => 'new', :client_id => client.id} %>
Ce qui signifie qu'il url sera construit comme ceci:
http://localhost:3000/clients/2/user/new
En créant l'utilisateur pour le client qu'il ID de 2.
Et puis capturer les informations dans le contrôleur comme ceci:
@user = User.new(:client_id => params[:client_id])
EDIT: Voici ce que j'ai actuellement à mon avis / contrôleur et Routes
Je continue à obtenir cette erreur: Aucun résultat de route "/ clients // user" avec {: method =>: après}
Routes
ActionController::Routing::Routes.draw do |map|
map.resources :users
map.resources :clients, :has_one => :user
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
Contrôleur
class UsersController < ApplicationController
before_filter :load_client
def new
@user = User.new
@client = Client.new
end
def load_client
@client = Client.find(params[:client_id])
end
def create
@user = User.new(params[:user])
@user.client_id = @client.id
if @user.save
flash[:notice] = "Credentials created"
render :new
else
flash[:error] = "Credentials created failed"
render :new
end
end
Voir
<% form_for @user, :url => client_user_url(@client) do |f| %>
<p>
<%= f.label :login, "Username" %>
<%= f.text_field :login %>
</p>
<p>
<%= f.label :password, "Password" %>
<%= f.password_field :password %>
</p>
<p>
<%= f.label :password_confirmation, "Password Confirmation" %>
<%= f.password_field :password_confirmation %>
</p>
<%= f.submit "Create", :disable_with => 'Please Wait...' %>
<% end %>
La solution 2
Je résolu ce problème en utilisant des attributs imbriqués, en incluant le modèle utilisateur, lors de la création du client. Et cela fonctionne parfaitement.
Dans le cas où l'un des gars dont vous avez besoin de plus d'information sur les deux ici screencasts qui m'a aidé à venir avec comme solution:
http://railscasts.com/episodes/196-nested -modèle-form-partie-1
http://railscasts.com/episodes/196-nested -modèle-form-partie-2
Autres conseils
Votre balise form est mauvaise, vous envoyez des messages /users
sans :client_id
.
Essayez ceci:
<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >
Vous pouvez utiliser les ressources imbriquées:
config / routes.rb
map.resources :clients do |clients|
clients.resources :users
end
Contrôleur
class UsersController < ApplicationController
before_filter :load_client
def load_client
@client = Client.find(params[:client_id])
end
# Your stuff here
end
Afficher
<% form_for [@client, @user] do |f| %>