我的评论控制器需要调整嵌套但我收到一些错误。这是我一直在尝试的:
<% if @commentable == @user %>
<%= semantic_form_for [@commentable, @comment] do |f| %>
<% else %>
<%= semantic_form_for [@user, @commentable, @comment] do |f| %>
<% end %>
这给出了这个:
/Users/rbirnie/rails/GoodTeacher/app/views/comments/_form.html.erb:3: syntax error, unexpected keyword_else, expecting keyword_end'); else
知道为什么这不起作用?看起来很简单......
以下是完整视图:
<% if @commentable == @user %>
<%= semantic_form_for [@commentable, @comment] do |f| %>
<% else %>
<%= semantic_form_for [@user, @commentable, @comment] do |f| %>
<% end %>
<div class="control-group">
<%= f.label :subject %>
<div class="controls"><%= f.text_field :subject %></div>
</div>
<div class="control-group">
<%= f.label :body %>
<div class="controls"><%= f.text_area :body, rows: 8 %></div>
</div>
<div class="form-actions">
<%= f.submit "Submit", :class => "btn-success" %>
</div>
<% end %>
答案 0 :(得分:12)
你应该结束'do'
<% if @commentable == @user %>
<%= semantic_form_for [@commentable, @comment] do |f| %>
<% end %>
<% else %>
<%= semantic_form_for [@user, @commentable, @comment] do |f| %>
<% end %>
<% end %>
预计'结束'之后'结束'不是'其他'。
由于
答案 1 :(得分:7)
它很生气,因为do
位开始一个块,期望end
结束它。但是当条件为真时,它会找到else
。请注意,如果条件为假,它会找到它想要的end
- 但不是您想要的end
!它会找到end
结束您的if
语句,而不是end
您希望结束您的阻止。
如果您的semantic_form_for
块在每种情况下都有不同的内容,请使用Paritosh的答案。但是如果它们是相同的代码并且你想避免重复它,你可以有条件地选择参数,然后将它们传递给单个semantic_form_for
:
<% args = (@commentable == @user)? [@commentable, @comment] : [@user, @commentable, @comment] %>
<%= semantic_form_for(args) do |f|
Whatever...
<% end %>
希望有所帮助!
答案 2 :(得分:3)
您描述的问题是纯Ruby,与视图无关。你可以写下这样的东西:
<%
if @commentable == @user
args = [@commentable, @comment]
else
args = [@user, @commentable, @comment]
end
%>
<%= semantic_form_for args do |f| %>