Routen Fehler auf [POST] [Ruby on Rails]
-
27-09-2019 - |
Frage
Im Moment eine Projektmanagement-Anwendung in Schienen Ich baue, hier einige Hintergrundinformationen:
Im Moment i2-Modelle haben, ist ein Benutzer und der andere ist Client. Kunden und Nutzer haben eine Eins-zu-Eins-Beziehung (Client -> has_one und Benutzer -> belongs_to was bedeutet, dass der Fremdschlüssel in der Tabelle users ist)
Also, was ich versuche, es zu tun, wenn Sie einen Client hinzufügen Sie Anmeldeinformationen tatsächlich hinzufügen können (fügen Sie einen Benutzer) auf dem Client, um so alle Kunden zu tun, mit einem Link zu der Client-Name des nächsten angezeigten was bedeutet, dass Sie die Anmeldeinformationen für diesen Client tatsächlich schaffen kann.
Also, um zu tun, dass ich so einen Helfer den Link zum Helfer bin mit.
<%= link_to "Credentials",
{:controller => 'user', :action => 'new', :client_id => client.id} %>
Was bedeutet, dass er so konstruiert werden URL:
http://localhost:3000/clients/2/user/new
Durch den Benutzer für die Kunden zu schaffen mit ihm ID 2.
Und dann die Informationen in die Steuerung wie folgt erfassen:
@user = User.new(:client_id => params[:client_id])
EDIT: Dies ist, was ich habe zur Zeit in meiner View / Controller und Routen
behalte ich diesen Fehler: Keine Route matches "/ Kunden // user" mit {: method =>: post}
Routen
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
Controller
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
Ansicht
<% 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 %>
Lösung 2
Ich löste dies durch verschachtelte Attribute verwenden, indem Sie das Benutzermodell einschließlich, wenn der Kunden zu schaffen. Und es funktioniert einwandfrei.
Falls jemand von euch Jungs brauchen mehr Informationen hier die beiden Screencasts, die mich mit als Lösung zu kommen geholfen:
http://railscasts.com/episodes/196-nested -Modell-form-Teil-1
http://railscasts.com/episodes/196-nested -Modell-form-Teil-2
Andere Tipps
Ihr Formular-Tag falsch ist, können Sie eine Mitteilung verfassen, /users
ohne :client_id
.
Versuchen Sie diese:
<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >
Alternativ können Sie verschachtelte Ressourcen verwenden:
config / routes.rb
map.resources :clients do |clients|
clients.resources :users
end
Controller
class UsersController < ApplicationController
before_filter :load_client
def load_client
@client = Client.find(params[:client_id])
end
# Your stuff here
end
<% form_for [@client, @user] do |f| %>