【问题标题】:Rails Dependent Form - Selecting a Specific Item from a ModelRails 相关表单 - 从模型中选择特定项目
【发布时间】:2012-04-01 18:01:17
【问题描述】:

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

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

我看过关于涉及多个模型的复杂表单的教程,但是当所有内容都来自同一个模型时呢?如何构建一个表单来获取少量相关记录。我对“运动”只有几个不同的价值观,所以我不确定给它自己的模型是否有意义。我可以从“日期时间”值轻松获取某个日期的事件吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    现在,如果您这样定义路线:

    资源:事件

    您将有一个路由 /events 将接受获取请求并将您路由到索引操作。

    但如果你想要一个可以选择内容的表单,默认情况下表单会 POST,但你可以创建一个 GET 到 '/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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多