【发布时间】:2016-07-02 19:12:58
【问题描述】:
使用 Rails 的 resources 指令,我为控制器 (contacts) 创建了一组路由。我现在正在编辑它们附带的默认视图,以包含我自己的一些内容。但是,link_to 方法失败了,告诉我缺少一个必需的参数。
没有路由匹配
{:action => 'show', :controller => 'contacts', :id => nil}缺少必需的键[:id]
很明显为什么会发生这种情况 - link_to 方法没有提供 ID,而是得到了 nil。但是,我使用的代码与 link_to 的文档相匹配。
这是有问题的视图:
<% @contacts.each do |contact| %>
<tr>
<td><%= contact.first %></td>
<td><%= contact.last %></td>
<td><%= contact.title %></td>
<td><%= contact.city %></td>
<td><%= contact.phone %></td>
<td><%= contact.email %></td>
<td><%= link_to 'Show', contact %></td>
<td><%= link_to 'Edit', edit_contact_path(contact) %></td>
<td><%= link_to 'Delete', contact.id, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
-
@contacts是从控制器返回的一组联系人。设置的行是:@contacts = Contact.select("title, first, last, city, phone, email") .where("created_by" => @current_user.id) routes.rb文件的相关内容就是
resources :contacts。
documentation 声明:
因为它依赖于 url_for,所以 link_to 支持旧式控制器/动作/id 参数和更新的 RESTful 路由。当前的 Rails 风格尽可能支持 RESTful 路由,因此将您的应用程序基于资源并使用 [...]
link_to "Profile", @profile
这似乎是我与link_to 'Show', contact 一起使用的。
- 为什么 ID 没有传递给
link_to? - 我能做些什么来解决这个问题?
【问题讨论】:
-
你确定联系人的id值是填的吗?要回答,我们需要知道 @contacts 中有什么?也许有一个选择子句阻止访问联系人属性?
-
@Oxynum 已编辑,我认为您现在可能正在我查看它。
标签: ruby-on-rails ruby