2013-05-03 77 views
6

我有一个与OutputFields has_many关系的查询模型。在我的查询控制器的新函数中,我在查询实例中构建了多个OutputField。在我的表单中,我希望每个复选框都确定是否保存了对象(检查意味着将此实例的OutputField保存到数据库中)。我怎样才能做到这一点?Rails 3 - 创建复选框(_destroy对面)

我的模型:我的查询控制器的

class Query < ActiveRecord::Base 
    attr_accessible :description, :name 

    has_many :output_fields, :dependent => :destroy 
    accepts_nested_attributes_for :output_fields 
end 

class OutputField < ActiveRecord::Base 
    attr_accessible :query_id, :column_name, :table_name 

    belongs_to :query 
end 

相关章节。结构是另一种模式。

# GET /queries/new 
    # GET /queries/new.json 
    def new 
    @query = Query.new 
    Structure.columns.each do |column| 
     @query.output_fields.build(:table_name => Structure.table_name, :column_name => column.name) 
    end 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render :json => @query } 
    end 
    end 

最后,我的看法。现在,我将复选框连接到destroy属性,我认为这与我想要的完全相反。

<%= form_for(@query) do |f| %> 
    <%= f.fields_for :output_fields do |builder| %> 
    <div class="field"> 
     <%= builder.check_box :_destroy %> 
     <%= builder.label :_destroy, builder.object.column_name %> 
    </div> 
    <% end %> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

如果不是很明显,我想生成一个简单的查询生成器的用户界面。这是我的第一个rails应用程序,所以任何建议表示赞赏。

回答

9

默认情况下,check_box表单助手的值是将checked_value设置为'1',将unchecked_value设置为'0'。因此,要改变销毁复选框的行为,只需切换这些值。

<%= builder.check_box :_destroy, {}, '0', '1' %> 
+0

不错的把戏+1从未来它为我工作。 – 2016-07-19 05:54:36