9

我的评论控制器需要调整嵌套,但我遇到了一些错误。这是我一直在尝试的:

<% 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 %>
4

3 回答 3

17

你应该结束“做”

<% if @commentable == @user %>
  <%= semantic_form_for [@commentable, @comment] do |f| %>
  <% end %>
<% else %>
  <%= semantic_form_for [@user, @commentable, @comment] do |f| %>
  <% end %>
<% end %>

它在“做”而不是“其他”之后期待“结束”。

谢谢

于 2012-09-12T18:32:19.977 回答
9

这很疯狂,因为dobit 开始了一个块,它期望 anend结束它。但是当条件为真时,它会找到一个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 %>

希望有帮助!

于 2012-09-12T18:40:16.297 回答
3

您描述的问题是纯 Ruby,与视图无关。你可以写这样的东西:

<%
if @commentable == @user
  args = [@commentable, @comment]
else
  args =  [@user, @commentable, @comment]
end
%>
<%= semantic_form_for args do |f| %>
于 2012-09-12T18:47:42.370 回答