将所选值传递给Rails控制器

时间:2015-12-17 21:19:58

标签: ruby-on-rails ruby

我在天平控制器(balances_controller.rb)中有一个名为'statement'的方法,它将特定日期(@latestDate)的信息返回给视图(statement.html.rb)

@latestDate = the most recent date in the 'date' column in the 'balances' table

在视图中,我还有一个所有日期的下拉列表,当选择日期时,我希望能够更新信息,以便实际上再次调用语句方法,但是@latestDate设置为下拉列表中的选定值。

我该怎么做?

更新:

我已经用brito的建议修改了我的代码。当我按下“搜索”按钮时,表单会传递以下参数:

?utf8=✓&date_id=30%2F12%2F2015&commit=Search 

但是,如果我选择一个日期并单击“搜索”,则会设置@latestDate并正确显示h1标记,但不会返回其余数据。

CODE:

balances_controller.rb

  ....
  def statement
    @dates = Balance.select("distinct(date)").order('date desc')

    #Updated
    if (params[:date_id].blank?)
      @latestDate = Balance.order('date desc').first.date
    else
      @latestDate = params[:date_id]
    end

    @summaryBalances = Balance.joins(:account).order('accounts.credit').where('date = :abc', {abc: @latestDate})
  end
  ....

余额/ statement.html.rb

....
<h1>Statement at <%= @latestDate %></h1>

#UPDATED
<%= form_tag("/statement", method: "get") do %>
<%= select_tag "date_id", options_for_select( @dates.collect {|d| [ d.date, d.date ] }) %>
<%= submit_tag("Search") %>
<% end %>

<div class="table-responsive">
<table class="table">
  <thead>
    <tr>
      <th>Account</th>
      <th>Balance</th>
      <th colspan="1"></th>
    </tr>
  </thead>

  <tbody>
    <% @summaryBalances.each do |balance| %>
      <tr>
        <td><%= balance.account.name %></td>    
        <td class='account-balance'><%= number_to_currency(balance.balance, unit: "£") %></td>
        <td><%= link_to 'Edit', edit_balance_path(balance) %></td>
      </tr>
    <% end %>
  </tbody>
</table>
</div>
....

1 个答案:

答案 0 :(得分:2)

“下拉列表”是一种输入(HTML <select>)。 <input><select>必须位于<form> HTML元素中。

使用纯HTML

<form>中的任何内容都可以在params哈希中访问。因此,如果您有一个下拉列表,它应该在<form>之内,如下所示:

<form accept-charset="UTF-8" action="/yourroute" method="get">
  <select name="car">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="opel">Opel</option>
    <option value="audi">Audi</option>
  </select>
</form>

在上面的示例中,所选值(例如“volvo”)将在params["car"]内的控制器中可用。请注意,您仍然需要定义/yourroute

使用Rails的帮助方法

当然,Rails可以帮助您生成表单和输入。您可以使用Rails'form helpers。例如,以下内容生成一个搜索表单(“搜索”标签,输入文本框和按钮),用于将GET发送到/search路径:

<%= form_tag("/search", method: "get") do %>
  <%= label_tag(:q, "Search for:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>

编辑

如果选择了balance[date_id],要检查并设置@latestDate = balance [date_id]:

@latestDate ||= params[:balance[date_id]] unless params[:balance].blank?