Ruby on rails 为什么我们需要传递:object到partials?
我有一个模型类别有很多:子类别 我正在使用代码根据使用Ajax的视图中的类别值下拉列表填充子类别值下拉列表。代码如下: _form.html.erbRuby on rails 为什么我们需要传递:object到partials?,ruby-on-rails,Ruby On Rails,我有一个模型类别有很多:子类别 我正在使用代码根据使用Ajax的视图中的类别值下拉列表填充子类别值下拉列表。代码如下: _form.html.erb <%= f.select :category_id, @categories, {}, :tab_index => 4, :onchange => "#{remote_function(:url => {:action => "populate_subcategories"},
<%= f.select :category_id, @categories, {}, :tab_index => 4, :onchange => "#{remote_function(:url => {:action => "populate_subcategories"},
:with => "'category_id='+value")}" %>
<div id = "subcategories_div">
<%= render :partial => "subcategories", :object => @subcategories %>
</div>
<div id = "subcategories_div">
<%= render :partial => "subcategories" %>
</div>
最后是_subcategories.html.erb
<%= f.select :subcategory_id, subcategories, {}, :tab_index => 5 %>
<%= f.select :subcategory_id, @subcategories, {}, :tab_index => 5 %>
使用@subcategories作为实例变量,以便它在局部视图中可用,就像Rails中的普通视图一样
也在_subcategories.html.erb中
<%= f.select :subcategory_id, subcategories, {}, :tab_index => 5 %>
<%= f.select :subcategory_id, @subcategories, {}, :tab_index => 5 %>
5%>
和_form.html.erb
<%= f.select :category_id, @categories, {}, :tab_index => 4, :onchange => "#{remote_function(:url => {:action => "populate_subcategories"},
:with => "'category_id='+value")}" %>
<div id = "subcategories_div">
<%= render :partial => "subcategories", :object => @subcategories %>
</div>
<div id = "subcategories_div">
<%= render :partial => "subcategories" %>
</div>
“子类别”%>
为什么第一种方法优于第二种方法?是不是因为我们只有一个变量可以传递给部分变量?第一种方法的性能有什么改进吗?原因是您希望部分代码独立于视图。通过使用@subcategories,可以在局部视图和视图之间创建不必要的依赖关系。这意味着要再次使用同一部分,必须确保定义了@subcategories,但情况可能并非如此。例如,您可能只定义了@my_子类别或@filtered_子类别。更糟糕的是,您可能有@subcategories和@filtered_子类别,并且您可能希望使用相同的分部显示这两个子类别。在这种情况下,最好能够将子类别传递给分部,而不是依赖于正在设置的实例变量。这样,您的部分就真正模块化了,并且符合面向对象的封装原则 例如:
<h1><%= My Subcategories %></h1>
render :partial => 'subcatgories', :object => @my_subcategories
<h1><%= Other Subcategories %></h1>
render :partial => 'subcatgories', :object => @other_subcategories
render:partial=>'subcatgaries',:object=>@my_subcategories
render:partial=>'子类别',:object=>@其他_子类别
您可以用partials优雅地命名您的IVAR
render 'subcatgories', :subcategories => @hashtags
或
然后你可以在你的部分中使用子类别
,使用ivar就像它的名字假装的那样
去看看
有更长的参数形式来实现相同的行为。。。(:partial=>'subcatgories',:locals=>{:subcategories=>@hashtags}
)
我相信:subcategories=>@hashtags
比:object=>@hashtags
@pan>具有更好的可读性。你能看看这个吗。。