Rutas de error en [mensaje] [Ruby on Rails]
-
27-09-2019 - |
Pregunta
Ahora estoy construyendo una aplicación de gestión de proyectos en los carriles, aquí está una cierta información de fondo:
En este momento tengo 2 modelos, uno es usuario y el otro es cliente. Los clientes y los usuarios tienen una relación uno-a-uno (cliente -> has_one y el usuario -> belongs_to lo que significa que la clave externa que está en la tabla de usuarios)
Así que lo que estoy tratando de hacer es una vez que se agrega un cliente en realidad se puede agregar credenciales (añadir un usuario) para que el cliente, con el fin de hacer lo que todos los clientes se muestran con un enlace al lado del nombre de dicho cliente lo que significa que en realidad se puede crear credenciales para ese cliente.
Así que con el fin de hacer que estoy usando un ayudante en el enlace para ayudante de esta manera.
<%= link_to "Credentials",
{:controller => 'user', :action => 'new', :client_id => client.id} %>
Lo que significa que él URL será construido de esta manera:
http://localhost:3000/clients/2/user/new
Al crear el usuario para el cliente con él Identificación de 2.
Y a continuación, la captura de la información en el controlador de la siguiente manera:
@user = User.new(:client_id => params[:client_id])
EDIT: Esto es lo que actualmente tengo en mi Vista / Controlador y Rutas
sigo recibiendo este error: No hay coincidencias ruta "/ clientes // usuario" con {: method =>: Poste}
Rutas
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
Ver
<% 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 %>
Solución 2
He resuelto mediante el uso de atributos anidados, incluyendo el modelo de usuario, al crear el cliente. Y funciona sin problemas.
En caso de que cualquiera de ustedes necesitan más información aquí están los dos screencasts que me ayudaron a subir con la solución:
http://railscasts.com/episodes/196-nested -Modelo-form-parte-1
http://railscasts.com/episodes/196-nested -Modelo-form-parte-2
Otros consejos
Su etiqueta de formulario está mal, hay demasiados temas que /users
sin la :client_id
.
Prueba esto:
<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >
Como alternativa, puede utilizar los recursos anidados:
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
Ver
<% form_for [@client, @user] do |f| %>