Errore di percorsi su [POST] [Ruby on Rails]
-
27-09-2019 - |
Domanda
In questo momento sto costruendo un app di gestione progetto in rotaie, ecco alcune informazioni di base:
In questo momento ho 2 modelli, uno è l'utente e l'altro è cliente. I clienti e gli utenti hanno una relazione uno-a-uno (client -> has_one e user -> belongs_to il che significa che la chiave esterna è nella tabella utenti)
Quindi quello che sto cercando di fare è una volta che si aggiunge un client si può effettivamente aggiungere le credenziali (aggiungere un utente) per quel cliente, al fine di fare in modo che tutti i client vengono visualizzati con un link accanto al nome del cliente il che significa che si può effettivamente creare le credenziali per tale client.
Quindi, al fine di fare che sto usando un aiutante il link per aiuto come questo.
<%= link_to "Credentials",
{:controller => 'user', :action => 'new', :client_id => client.id} %>
Il che significa che egli URL sarà costruito in questo modo:
http://localhost:3000/clients/2/user/new
Con la creazione l'utente per il cliente con gli ID di 2.
E poi catturare le informazioni nel controller in questo modo:
@user = User.new(:client_id => params[:client_id])
EDIT: Questo è quello che attualmente ho in Vista / Controller e Percorsi
Continuo a ricevere questo errore: Nessuna corrispondenza di percorso "/ clienti // utente" con {: method =>: messaggio}
Itinerari
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
Regolatore
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
Visualizza
<% 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 %>
Soluzione 2
Ho risolto questo utilizzando attributi nidificati, includendo il modello di utente, durante la creazione del client. E funziona perfettamente.
Nel caso qualcuno di voi ragazzi bisogno di maggiori informazioni, ecco i due screencast che mi ha aiutato venuta in mente come soluzione:
http://railscasts.com/episodes/196-nested -model-form-parte-1
http://railscasts.com/episodes/196-nested -model-form-parte-2
Altri suggerimenti
Il tag form è sbagliato, stai postando /users
senza il :client_id
.
Prova questo:
<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >
In alternativa, è possibile utilizzare le risorse nidificate:
config / routes.rb
map.resources :clients do |clients|
clients.resources :users
end
Regolatore
class UsersController < ApplicationController
before_filter :load_client
def load_client
@client = Client.find(params[:client_id])
end
# Your stuff here
end
Visualizza
<% form_for [@client, @user] do |f| %>