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 %>
War es hilfreich?

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| %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top