كيفية حفظ سمات النموذج المتداخل إلى قاعدة البيانات

StackOverflow https://stackoverflow.com/questions/2801196

سؤال

أنا لا أفهم حقًا كيف تعمل السمات المتداخلة في القضبان.

لدي نماذج وحسابات ومستخدمين. حساب ass_many مستخدمي. عندما يملأ مستخدم جديد النموذج ، تقارير Rails

User(#2164802740) expected, got Array(#2148376200)

لا يمكن للقضبان قراءة السمات المتداخلة من النموذج؟ كيف يمكنني إصلاح ذلك؟ كيف يمكنني حفظ البيانات من السمات المتداخلة إلى قاعدة البيانات؟

شكرا الكل ~

هنا MVCs:

نموذج الحساب

class Account < ActiveRecord::Base
  has_many :users
  accepts_nested_attributes_for :users

  validates_presence_of       :company_name, :message => "companyname is required."
  validates_presence_of       :company_website, :message => "website is required."
end

نموذج المستخدم

class User < ActiveRecord::Base
  belongs_to :account

  validates_presence_of         :user_name, :message => "username too short."
  validates_presence_of         :password, :message => "password too short."
end

وحدة تحكم الحساب

class AccountController < ApplicationController
  def new
  end

  def created
  end

  def create
    @account = Account.new(params[:account])
    if @account.save
      redirect_to :action => "created"
    else
      flash[:notice] = "error!!!"
      render :action => "new"
    end
  end
end

حساب/عرض جديد

<h1>Account#new</h1>

<% form_for :account, :url => { :action => "create" } do |f| %>
    <% f.fields_for :users do |ff| %>
    <p>
        <%= ff.label :user_name %><br />
        <%= ff.text_field :user_name %>
    </p>
    <p>
        <%= ff.label :password %><br />
        <%= ff.password_field :password %>
    </p>
    <% end %>
    <p>
        <%= f.label :company_name %><br />
        <%= f.text_field :company_name %>
    </p>
    <p>
        <%= f.label :company_website %><br />
        <%= f.text_field :company_website %>
    </p>
<% end %>

ترحيل الحساب

class CreateAccounts < ActiveRecord::Migration
  def self.up
    create_table :accounts do |t|
      t.string :company_name
      t.string :company_website

      t.timestamps
    end
  end

  def self.down
    drop_table :accounts
  end
end

ترحيل المستخدم

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :user_name
      t.string :password
      t.integer :account_id

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

شكرا لكم جميعا. قون

هل كانت مفيدة؟

المحلول

تغيير منطقة العرض التالية:

<% form_for :account, :url => { :action => "create" } do |f| %>

داخل:

<% form_for @account do |f| %>

داخل وحدة التحكم الخاصة بك يجب أن يكون لديك شيء من هذا القبيل:

def new
  @account = Account.new
  # the new empty account doesn't have any users
  # so the user fields inside your view won't appear unless you specify otherwise:
  @account.users.build
  @account.users.build
  @account.users.build
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top