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 %>
¿Fue útil?

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| %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top