Я не очень понимаю, как работают вложенные атрибуты в Rails.
У меня есть 2 модели, Аккаунты и Пользователи. Аккаунт has_many Пользователи. Когда новый пользователь заполняет форму, Rails сообщает
User(#2164802740) expected, got Array(#2148376200)
Может ли Rails не читать вложенные атрибуты из формы? Как я могу это исправить? Как сохранить данные из вложенных атрибутов в базу данных?
Спасибо всем ~
Вот MVC:
Модель учетной записи
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
Спасибо всем. :)