我在天平控制器(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>
....
答案 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?