我正在尝试根据用户所在的分类单元呈现部分内容。在我的application.html.erb布局中,我有以下代码行:
<%= render 'spree/shared/women_subnav' if @enable_women %>
在taxons控制器中,在show方法中,我有:
@taxon_id = params[:id].split('/').first
在分类单元中#show我有:
<% if @taxon_id == params[:id].split('/').first %>
<%= "@enable_#{@taxon_id}" = true %>
<% end %>
当我运行它时,我得到一个SyntaxError。但在分类中#show如果我只是输入:
<% if @taxon_id == params[:id].split('/').first %>
<%= "@enable_#{@taxon_id}" %>
<% end %>
没有'= true'然后页面呈现,输出'@enable_women'。所以我知道它正在获取正确的变量,我只需要将该变量设置为true。我错过了什么?
非常感谢。
答案 0 :(得分:3)
首先,我想给你一些提醒:
首先调用用户可提交的输入不是一个好主意(如果我提交怎么办?id =,它会返回nil)也非utf-8编码会使你的应用程序崩溃,例如:?id =Ж< / p>
控制者是野兽!我看到你在视图中设置了一个真/假instance_variable的值,请使用控制器在渲染其输出之前定义逻辑。特别是当参数依赖时。
所以对于一个解决方案: 在你的控制器中,params [:id]应该建议一个INT(11)值:
def action
# returning a Taxon should be a good idea here
@taxon = Taxon.find(params[:id])
# as I would give a Taxon class an has_many relation to a User
@users = @taxon.users
end
并在您的操作视图中
<%= render :partial => "taxons/users", collection: @users %>
当然,您可以很好地确定返回的用户的范围并相应地渲染所需的部分。
如果您想了解更多关于“The Rails方式”的信息,请阅读: http://guides.rubyonrails.org/
玩得开心!
答案 1 :(得分:1)
使用instance_variable_set
instance_variable_set "@enable_#{@taxon_id}", true
只是提醒一下,在控制器内做这些事情会更好。