0

我正在使用 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]))

其中。

如何让我的控制器从我的视图中查看多个参数?

4

2 回答 2

2

我看到您使用 GET传递 的,使用 POST 传递新的。这真的是你想要的吗?为什么控制器需要旧的?timePeriodtimePeriodtimePeriod

因为你想显示一个图表——也就是说,你想检索数据,而不是造成副作用——我认为你应该只timePeriod使用 GET 发送新的:

<%= 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参数——只需在控制器中查看它的使用位置,然后更改名称。

于 2012-08-01T15:40:30.563 回答
1

没有什么反对 Idan 的回答,但这就是我最终做的事情(对于未来的谷歌人......)

在我看来:

<%= 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参数存储在搜索框中,以供以后使用。

希望这对将来的任何人都有帮助!

于 2012-08-01T21:47:11.840 回答