我正在使用Rails和jqPlot在网页上显示一些数据。图表需要按日期灵活(例如,用户可以选择时间范围,图表将自行更新)。到目前为止,这是我的代码(在我的视图中):
<%= form_tag home_event_trends_path(params[:timePeriod]), :method => 'post' do %>
<p>
<%= select_tag :timePeriod, options_for_select(["2 Hours Ago", "1 Week Ago", "3 Months Ago"], :selected => params[:timePeriod]) %>
<%= submit_tag "Refresh", :name => nil %>
</p>
<% end %>
Home
是我的控制者,我想是event_trends
是一个动作。 (路径为localhost:3000 / home / event_trends.3102030)
这很好用。但是,我还需要将另一个参数传递给我的控制器。这个网页已经传递了一个参数params[:format]
(这是URL中的3102030,根据我想要显示的事件而改变),我也需要传递它。我试过了:
home_event_trends_path(params[:timePeriod][:format])
home_event_trends_path(params[:timePeriod],[:format])
home_event_trends_path(params([:timePeriod][:format]))
等。
如何让我的控制器从我的视图中查看多个参数?
答案 0 :(得分:2)
我发现您使用GET传递旧 timePeriod
,使用POST传递新timePeriod
。这真的是你想要的吗?为什么控制器需要旧的timePeriod
?
由于您想要显示图表 - 也就是说,您想要检索数据而不是引起副作用 - 我认为您应该只使用GET发送新的timePeriod
:
<%= form_tag home_event_trends_path(), :method => 'get' do %>
<p>
<%= select_tag :timePeriod, options_for_select(["2 Hours Ago", "1 Week Ago", "3 Months Ago"], :selected => params[:timePeriod]) %>
<%= select_tag :format, options_for_select([...], :selected => params[:format]) %>
<%= submit_tag "Refresh", :name => nil %>
</p>
<% end %>
另外,我同意Anthony的观点 - 您应该尝试更改format
参数 - 只需查看控制器以查看它的使用位置,然后更改名称。
答案 1 :(得分:1)
没有什么可以反对Idan的回答,但这就是我最终做的事情(对于未来的Google员工......)
在我的观点中:
<%= form_tag home_event_trends_path, :method => 'get' do %>
<p>
<%= select_tag :timePeriod, options_for_select(["2 Hours Ago", "1 Week Ago", "3 Months Ago"], :selected => params[:timePeriod]) %>
<%= text_field_tag :issue, params[:issue] %>
<%= submit_tag "Refresh", :name => nil %>
</p>
<% end %>
然后在我的家庭控制器中:
def event_trends
@eventTrend = Home.eventTrend(params[:timePeriod], params[:issue])
end
最后,模特:
def self.eventTrend(date, id)
# dirty work
end
这对我来说似乎最有效。我决定允许更改GET请求的URL,我立即将issue
参数存储在搜索框中,以便稍后使用。
希望这有助于将来的任何人!