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

「else」ではなく「do」の後に「end」が必要です。

ありがとう

于 2012-09-12T18:32:19.977 に答える
9

doビットがブロックを開始し、それが終了することを期待しているため、それはおかしいendです。しかし、条件が true の場合は、else代わりに が見つかります。条件が false の場合、必要endなようなものは見つかりますが、end必要なものは見つからないことに注意してください。ブロックを終了したいではなく、ステートメントendを終了するを見つけます。ifend

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 に答える