Ruby on rails Rails资源路由未命中参数,但与文档匹配
使用Rails的Ruby on rails Rails资源路由未命中参数,但与文档匹配,ruby-on-rails,ruby,Ruby On Rails,Ruby,使用Rails的资源指令,我为控制器(联系人)创建了一组路由。我现在正在编辑它们附带的默认视图,以包含一些我自己的内容。但是,link\u to方法失败,告诉我缺少一个必需的参数 没有路由匹配{:action=>'show',:controller=>'contacts',:id=>nil}缺少必需的密钥[:id] 发生这种情况的原因很明显,link\u to方法没有提供ID,而是得到了零。但是,我使用的代码与link\u to的文档相匹配 这是有争议的观点: <% @contacts.e
资源
指令,我为控制器(联系人
)创建了一组路由。我现在正在编辑它们附带的默认视图,以包含一些我自己的内容。但是,link\u to
方法失败,告诉我缺少一个必需的参数
没有路由匹配{:action=>'show',:controller=>'contacts',:id=>nil}
缺少必需的密钥[:id]
发生这种情况的原因很明显,link\u to
方法没有提供ID,而是得到了零。但是,我使用的代码与link\u 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 %>
resources:contacts
link_to "Profile", @profile
这似乎就是我正在使用的链接到“Show”,联系
- 为什么ID没有传递到
链接到
- 我能做些什么来补救这个问题
您的代码似乎很好
也许@contacts数组中有一个实例没有保存,因此没有id
另一种方法(同样,您的代码很好)是:
=链接到“显示”,联系人路径(联系人)
我建议张贴路线文件 变化
Contact.select("title, first, last, city, phone, email")
到
联系人的id为nil,因为它不在select查询中
另外,虽然现在看起来没有引起问题,但我还是建议使用符号数组而不是逗号分隔的字符串进行查询,这样sql查询就更具体了。例如:
Contact.select("title, first").to_sql #=> SELECT title, first FROM contacts
Contact.select(:title,:first).to_sql #=> SELECT "contacts"."title", "contacts"."first" FROM contacts
这样,如果您与另一个模型进行连接,它就不会抱怨select中的非特定id
。如果您觉得键入的内容太多,可以使用:
您确定联系人的id值已填写吗?要回答这个问题,我们需要知道@contacts中有什么?可能有一个select子句阻止访问中编辑的联系人属性?@Oxynum,我想您现在可能看到了它。路由中编辑的文件,尽管唯一相关的部分是resources:contacts
Contact.select("title, first, last, city, phone, email, id")
Contact.select("title, first").to_sql #=> SELECT title, first FROM contacts
Contact.select(:title,:first).to_sql #=> SELECT "contacts"."title", "contacts"."first" FROM contacts
Contact.select(*%i(title first last city phone email))