Rails单选按钮用params检查

时间:2014-01-09 20:47:46

标签: ruby-on-rails ruby-on-rails-4

我正在用户索引页面上对用户模型进行排序。现在,我所拥有的是两个可以通过单选按钮访问的选项。我可能会以错误的方式做这件事,它现在有效,但如果你有更好的方法,那么请说清楚。我的主要问题是为什么选择单选按钮时不会检查它们?

用户的索引控制器

if params[:sort] == "popular"
  @users = User.most_popular_users
elsif params[:sort] == "recent"
  @users = User.most_recent_users
end

User.rb

scope :most_popular_users, -> do 
  results = select {|user| user.followers }
  results.sort! {|t1, t2| t2.followers.count <=> t1.followers.count}
end

scope :most_recent_users, -> do 
  results = User.all
  results.sort! {|t1, t2| t2.created_at <=> t1.created_at}
end

同样,我不确定在“最佳实践”方面有多正确,所以如果它错了,我也愿意改变它。回到问题......

我的观点如下:

<%= form_tag find_users_path, :method => 'get' do %>
  <%= radio_button_tag(:sort, "popular") %>
  <%= label_tag(:sort_popular, "Popular") %>
  <%= radio_button_tag(:sort, "recent") %>
  <%= label_tag(:sort_recent, "Recent") %>

  <%= submit_tag "Submit" %>
<% end %>

现在,当您提交表单时,它会正确地对用户进行排序,但未在相应页面上选择所选的收音机。因此,当您提交表单时,找到popular个用户,网址如下:

/people?sort=popular

但未检查popular的单选按钮。

1 个答案:

答案 0 :(得分:3)

您需要执行以下操作:

radio_button_tag(:sort,"popular", params[:sort].eql?("popular"))

radio_button_tag助手的第3个参数接受true或false值,以了解是否检查了无线电。更多信息:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-radio_button_tag