将text_field输入值传递给某个控制器

时间:2013-07-27 21:59:06

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

我是Ruby和Rails的新手,我遇到了一个似乎无法解决的问题:

在我的rails应用程序中,我的用户在索引站点上称为home,显示了几个事件。

如果用户想要“标记”这些事件,他可以点击事件旁边的按钮并将其添加到他的event_items列表中,这只是我为用户和事件之间的关联实现的“关联”控制器(例如,用户has_many事件,反之亦然)

这一切都很好,这就是我实现添加功能的方式:

回家的

index.html.erb摘录:

<h2>Events</h2>
<% @events.each do |event| %>​
​  <div>​<%= event.eventtitle %></div>
  <%= button_to 'Add Event', event_items_path(event_id: event, user_id: session[:user_id]) %>
<% end %>

button_to方法可以在event_item列表中添加一个事件,该列表只记录even_items db-table中关联的user_id和event_id。

现在我想允许用户在event_items db-table中添加对事件的注释。

我似乎无法找到将text_field值传递给event_items_path以将注释添加到db中的event_items表的方法。

我想我不能再使用“button_to”方法,因为它以自己的形式解析,因此我无法传输任何text_field信息。所以我创建了一个新表单...我无法通过这个表单将text_field信息作为参数传递:

主页的新index.html.erb摘录:

<h2>Events</h2>
<% @events.each do |event| %>​
  <%= form_for :event_items, url: event_items_path(event_id: event, user_id: session[:user_id]) do |f| %>
    <div>​<%= event.eventtitle %></div>
    <%= f.label :event_comment %><br />        
    <%= f.text_field :event_comment %>
    <%= f.submit %>
  <% end %>
<% end %>

当我按下提交按钮时,它仍会在我的db-table中创建event_item,但没有event_comment。在我的浏览器中检查后传输它似乎不传输:event_comment。

它只能访问参数中的:event_id和:user_id。

我将不胜感激任何帮助!

更新

我刚刚意识到,当我从上面的新表单中按下提交按钮时,:event_comment确实会与表单一起传输。

签入Chromes DevTools,在网络&gt;&gt;标题中有一个帖子请求,其中event_iduser_id列在查询字符串参数下,event_comment列在表单数据下{ {1}}

有谁知道我如何访问表单数据?使用params [:homepredictions]在我的event_items控制器中不起作用。

1 个答案:

答案 0 :(得分:0)

现在找到解决方案:

:event_comment正在提交时传输。它作为event_items[homeprediction]存储在表单数据中。

这是我在event_items控制器中访问数据所做的:

def create
  @user = User.find(params[:user_id])
  event = Event.find(params[:match_id])
  comment = params[:event_items]
  @event_item = @user.event_items.build(event: event, event_comment: comment[:event_comment])
  ...
end

我将params[:event_items]哈希保存到新的comment[]哈希。在新的comment[]哈希中,我能够访问从表单field_tag传递的:event_comment

不知道这是否是最优雅/正确的做法。但它现在有效: - )