Rails如果在视图中

时间:2012-09-12 18:30:00

标签: ruby-on-rails

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

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

3 个答案:

答案 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| %>