尝试执行嵌套对象表单。页面加载时没有错误,但是当我发送它时,没有信息保存到组织模型。
SQL调用说这个..
Parameters: {"commit" => "save", "action"=>"update","_method"=>"put", "organization"=>{"likes_snacks"=>"0"}, ..
哪个是对的。通过打开和关闭复选框可以正确更改1和0。但是我想这些信息并没有保存到数据库中。有什么想法吗?
HAML:
- form_for @user do |f|
= f.label :username
= f.text_field :username
.clear
- fields_for :organization do |org| unless @user.organizations.empty?
= org.label :likes_snacks, 'Like snacks?'
= org.check_box :likes_snacks
= f.submit 'save', {class => 'button'}
控制器:
def edit
@user = current_user
@organization = current_user.organizations.first
end
模型:
ORGANIZATION.RB:
has_many :users, :through => :organizations_users
USER.RB:
has_many :organizations, :through => :organizations_users
答案 0 :(得分:2)
您似乎可以保存父属性,但不能保存子属性。
要通过嵌套表单访问子属性,您需要将“#{child_class_name} _attributes”添加到父类中的attr_accessible方法。(仅当在父模型中使用attr_accessible
时)
所以你的父模型应如下所示:
class User < ActiveRecord::Base
attr_accessible :username, :organizations_attributes
accepts_nested_attributes_for :organizations
end
此外,如果您不在父模型中使用attr_accessible
,则无需这样做。
答案 1 :(得分:1)
我认为这里有趣的部分是链接器表:organization_users。
关于这个问题的公认答案说你需要
form_for @user do |f|
f.fields_for :organization_users do |ff|
ff.fields_for :organization
答案 2 :(得分:0)
另外,请阅读这篇关于accepts_nested_attributes_for的精彩文章,当您希望单个表单满足多个模型时非常有用。
希望你会喜欢这个。
由于
Rameshwar