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 %>
È stato utile?

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| %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top