سؤال

الآن أقوم ببناء تطبيق لإدارة المشاريع في Rails ، إليك بعض المعلومات الأساسية:

الآن لدي نموذجان ، أحدهما مستخدم والآخر عميل. لدى العملاء والمستخدمين علاقة فردية (عميل -> HAS_ONE و user -> ينتمي إلى ما يعني أن المفتاح الخارجي في جدول المستخدمين)

لذا فإن ما أحاول القيام به هو بمجرد إضافة عميل ، يمكنك بالفعل إضافة بيانات اعتماد (إضافة مستخدم) إلى هذا العميل ، من أجل القيام بذلك يتم عرض جميع العملاء مع رابط بجوار اسم العميل بمعنى أنه يمكن في الواقع إنشاء بيانات اعتماد لهذا العميل.

لذلك من أجل القيام بذلك ، أستخدم مساعدًا على الرابط إلى المساعد مثل هذا.

<%= link_to "Credentials", 
        {:controller => 'user', :action => 'new', :client_id => client.id} %>

بمعنى أنه سيتم بناء عنوان URL على هذا النحو:

http://localhost:3000/clients/2/user/new

عن طريق إنشاء المستخدم للعميل مع معرف 2.

ثم التقاط المعلومات في وحدة التحكم مثل هذا:

@user = User.new(:client_id => params[:client_id])

تحرير: هذا ما لدي حاليًا في عرضي/وحدة التحكم والطرق

أستمر في الحصول على هذا الخطأ: لا يوجد مسار يتطابق "/العملاء // المستخدم" مع {: method =>: post}

الطرق

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

مراقب

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

رأي

   <% 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 %>
هل كانت مفيدة؟

المحلول 2

لقد قمت بحل هذا باستخدام سمات متداخلة ، من خلال تضمين نموذج المستخدم ، عند إنشاء العميل. وهو يعمل بلا عيب.

في حال احتاج أي منكم يا رفاق إلى مزيد من المعلومات ، فهناك شاشة الشاشة التي ساعدتني في التوصل إلى حل كحل:

http://railscasts.com/episodes/196-nested-model-form-bart-1

http://railscasts.com/episodes/196-nested-model-form-bart-2

نصائح أخرى

علامة النموذج الخاصة بك خاطئة ، أنت تنشر /users بدون ال :client_id.

جرب هذا:

<% form_for @user, :url => {:controller => 'users', :action => 'new', :client_id => @client.id} do |f| >

بدلاً من ذلك ، يمكنك استخدام الموارد المتداخلة:

config/routes.rb

map.resources :clients do |clients|
  clients.resources :users
end

مراقب

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| %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top