0

我对 Ruby 和 Rails 很陌生,遇到了一个我似乎无法解决的问题:

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

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

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

主页的 index.html.erb 提取:

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

button_to 方法可以很好地将事件添加到 event_item 列表,该列表仅记录 user_id 和 event_id 在 even_items 数据库表中的关联。

现在我想允许用户在 event_items 数据库表中添加对事件的评论。

我似乎找不到将 text_field 值传递给我的 event_items_path 以将注释添加到数据库中的 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>​&lt;%= event.eventtitle %></div>
    <%= f.label :event_comment %><br />        
    <%= f.text_field :event_comment %>
    <%= f.submit %>
  <% end %>
<% end %>

当我按下提交按钮时,它仍然在我的数据库表中创建 event_item,但没有 event_comment。在我的浏览器中检查帖子传输,它似乎没有传输:event_comment。

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

我将不胜感激任何帮助!

更新

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

在 Chromes DevTools 中检查,在 Network>>Headers 中有一个 post 请求,它event_iduser_idQuery String Parametersevent_comment下列出,在 Form Data 下列出event_items[homeprediction]

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

4

1 回答 1

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[]哈希中,我能够访问:event_comment从表单 field_tag 传递的内容。

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

于 2013-07-28T08:13:13.860 回答