另一个rails嵌套形式问题

时间:2010-07-19 16:49:44

标签: ruby-on-rails nested-forms

尝试执行嵌套对象表单。页面加载时没有错误,但是当我发送它时,没有信息保存到组织模型。

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

3 个答案:

答案 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的精彩文章,当您希望单个表单满足多个模型时非常有用。

http://currentricity.wordpress.com/2011/09/04/the-definitive-guide-to-accepts_nested_attributes_for-a-model-in-rails-3/

希望你会喜欢这个。

由于

Rameshwar