Rails依赖表单 - 从模型中选择特定项

时间:2012-04-01 18:01:18

标签: ruby-on-rails ruby-on-rails-3 forms ruby-on-rails-3.2

我是Rails的新手所以要温柔。我有一个模型,'事件',其中包含以下信息:'sport','home_team','away_team'和日期时间的'time'。

现在,我想让用户“关注”特定事件,并尝试找到最佳方法。理想情况下,我想要一个带有依赖下拉列表的表单。例如,用户首先选择“日”,然后选择“运动”,然后从该“日”和“运动”的相关“事件”列表中进行选择。然后将此关联存储在名为“follow”的富联接表中。

我见过涉及多个模型的复杂表单的教程,但是什么时候来自同一个模型呢?如何构建表单以获取少量相关记录。我对“运动”只有一些不同的价值,所以我不确定给它自己的模型是否合理。我可以从“日期时间”值轻松获取特定日期的事件吗?

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,这里有一个选择: 由于您希望查看多个事件,因此您可能会开始关注索引操作。从创建和索引操作开始,但添加一些钩子来过滤它,即

def index
  if params[:sport]
    @events = Event.where("sport = ?",params[:sport])
  else
    @events = Event.all()
  end
end

现在,如果你已经定义了这样的路线:

资源:事件

您将拥有一条接受获取请求的路线/事件,并将您引导至索引操作。

但是如果你想要一个可以选择内容的表单,默认情况下表单会POST,但是你可以创建一个表单来获取'/ events'

即。在app / views / events / index.html.erb

<%= form_tag '/events', :method=>:get  %>

然后,您要创建将发送参数的表单元素。

即。

<%= select_tag 'sport', '<option>baseball</option><option>football</option>' %>

输入提交按钮

<%= submit_tag 'See Events'

然后用

'结束'你的表格
<% end %>

现在,当您点击“查看活动”按钮时,您将向路线'/ events'发送获取请求,并且'sport'参数将显示在索引操作中,过滤事件。

为了简单起见并且在索引视图中,您可以在表单后列出所有事件。

<% @events.each do |e| %>
  Sport: <%= e.sport %><br/>
  Home Team: <%= e.home_team %><br/>
  Away Team: <%= e.away_team %><br/>
  Time: <%= e.time.strftime('%H %M') %><br/>
<% end %>