帮助在不同的显示页面中创建操作

时间:2010-06-14 17:25:19

标签: ruby-on-rails

我是一个Rails新手,想做点什么,但一直在弄乱。我很乐意帮忙。

我有一个简单的应用程序,有三个表。用户,机器人和收件人。机器人属于用户,收件人属于机器人。

在机器人展示页面上,我希望能够在机器人展示页面内为该机器人创建收件人。

我在机器人显示页面中有以下代码,其中列出了当前收件人:

<table>

<% @robot.recipients.each do |recipient| %>
  <tr>
    <td><b><%=h recipient.chat_screen_name %></b> via <%=h recipient.protocol_name</td>

    <td><%= link_to 'Edit', edit_recipient_path(recipient) %>&nbsp;</td>
    <td><%= link_to 'Delete', recipient, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

我想要做的是有一个空字段,用户可以在其中添加新收件人,并尝试了以下操作:

我将此添加到机器人展示视图中:

<% form_for(@robot.recipient) do |f| %>
Enter the screen name<br>
<%= f.text_field :chat_screen_name %>
<p>
  <%= f.submit 'Update' %>
</p>
<% end %>

然后在show动作中给机器人控制器:

@recipient = Recipient.new
  @recipients = Recipient.all

唉,我仍然收到NoMethod错误,上面写着:“未定义的方法`收件人'#”

我不确定我错过了什么。任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可能需要@robot.recipient

,而不是在表单中调用@recipient

答案 1 :(得分:0)

使用@recipient,就像@ealdent所说。

您的更新操作应与此类似:

def update
  @robot = Robot.find(params[:id])
  @robot.recipients.build(params[:recipient])
  ...
end

这将在给定机器人的集合中创建收件人。

但是有更好的方法可以做到这一点,你可以添加无限数量的收件人,如here所述

希望这能让你开始。