My comment controller needs adjust for nesting but I'm getting a few errors. Here's what I've been trying:
<% if @commentable == @user %>
<%= semantic_form_for [@commentable, @comment] do |f| %>
<% else %>
<%= semantic_form_for [@user, @commentable, @comment] do |f| %>
<% end %>
Which gives this:
/Users/rbirnie/rails/GoodTeacher/app/views/comments/_form.html.erb:3: syntax error, unexpected keyword_else, expecting keyword_end'); else
Any idea why this isn't working? Seems simple enough...
Here's the full view:
<% 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 %>
Notice Ruby uses elsif, not else if nor elif. Executes code if the conditional is true. If the conditional is not true, code specified in the else clause is executed.
It's mad because the do bit starts a block, which expects an end to end it. But when the condition is true, it finds an else instead. And note that if the condition was false, it would find an end like it wants - but not the end you want! It would find the end that ends your if statement - not the end that you want to end your block.
If your semantic_form_for blocks have different contents in each case, use Paritosh's answer. But if they're the same code and you want to avoid repeating it, you can pick the arguments conditionally, and then pass them into a single semantic_form_for:
<% args = (@commentable == @user)? [@commentable, @comment] : [@user, @commentable, @comment] %>
<%= semantic_form_for(args) do |f|
Whatever...
<% end %>
Hope that helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With