在Rails

时间:2015-11-07 23:09:05

标签: html ruby-on-rails parameters radio-button conditional

我有一对单选按钮,我想要仅为checked操作预先指定new值。现在我有条件地呈现两个部分。一部分具有带checked属性的单选按钮,另一部分具有非属性:

<%= form_for([@restaurant, @dish_review], url: :restaurant_dish_reviews) do |f| %>
  <% if action_name == "new" %>
    <%= render "status_buttons_checked", f: f, dish: @dish %>
  <% else %>
    <%= render "status_buttons", f: f %>
  <% end %>
<% end %>

_ status_buttons_checked

<div class="field">
    <%= f.radio_button :status, :upvoted, checked: current_user.voted_up_on?(dish) %>
    <%= f.label :status, value: :upvoted %>

    <%= f.radio_button :status, :downvoted, checked: current_user.voted_down_on?(dish) %>
    <%= f.label :status, value: :downvoted %>
</div>

_ statsus_buttons

<div class="field">
    <%= f.radio_button :status, :upvoted, checked: current_user.voted_up_on?(dish) %>
    <%= f.label :status, value: :upvoted %>

    <%= f.radio_button :status, :downvoted, checked: current_user.voted_down_on?(dish) %>
    <%= f.label :status, value: :downvoted %>
</div>

我想知道在Rails中是否有任何方法我可以在radio_button参数中插入条件而不是创建两个部分。我想要类似于下面显示的内容,但遇到模板错误:

<%= f.radio_button :status, :downvoted, if action_name == "new" current_user.voted_down_on?(dish) %>

1 个答案:

答案 0 :(得分:0)

使用form_for时,您使用的表单方法会自动填充适合您属性的数据。虽然我不知道这是否适用于checked值,但这意味着如果您有以下内容:

<%= form_for @user do |f| %>
   <%= f.text_field :name %>
<% end %>

... :name将从您的@user对象中填充(如果它是new,则不会插入任何数据。)

-

这意味着,如果您使用form_for,则应该能够使用传递给视图的数据填充checked值:

<%= form_for [@restaurant, @dish_review] do |f| %>
   <%= f.radio_button :status, :upvoted, checked: current_user.voted_up_on? @dish %>
   <%= f.radio_button :status, :downvoted, checked: current_user.voted_down_on? @dish %>
<% end %>

我没有看到你试图从你的部分中获得什么(他们都是相同的) - 但如果你想创造&#34;检查&#34;在条件方面,您可以使用以下内容:

   <%= checked = action_name == "new"
   <%= f.radio_button :status, :downvoted, checked: checked %>

这会将值设置为&#34; true&#34;或&#34;假&#34;取决于操作是否为new