没有路由匹配{:action =>“show”,:controller =>“contacts”,:id => nil}缺少必需的密钥:[:id]

时间:2017-07-13 13:45:23

标签: ruby-on-rails postgresql

我知道有很多人问同样的问题,但我找不到解决办法。

当我尝试编辑联系人时,会发生此错误。这意味着我需要在DB中查询当前联系人。

我的编辑方法如下所示

def edit
    @contact = Contact.active
                      .select("phone_number, email, first_name, last_name, address1, address2, city, state, zipcode, country, gender, birthday, optional1, optional2, optional3, optional4, optional5, string_agg(tags.name,',') as tags")
                      .where("contacts.organization_id = ? and contacts.id = ?", current_users_user.organization_id, params[:id])
                      .joins("INNER JOIN tag_contacts on tag_contacts.contact_id = contacts.id")
                      .joins("INNER JOIN tags on tags.id = tag_contacts.tag_id")
                      .group("contacts.id,phone_number, email, first_name, last_name, address1, address2, city, state, zipcode, country, gender, birthday, optional1, optional2, optional3, optional4, optional5")
                      .first
end

当我点击编辑按钮时,我收到此错误。

No route matches {:action=>"show", :controller=>"contacts", :id=>nil} missing required keys: [:id]

但是当我将查询从终端窗口复制并粘贴到Postgres时,查询会返回一条记录,其中包含我需要的内容。

这是我的联系路线

resources :contacts, :only => %w(index new edit show update create destroy) do
  get 'import', on: :collection 
  collection {post :exec_import}
end

向我询问您可能需要的任何额外信息!非常感谢你!

修改

这就是我的称呼方式

<%= form_for @contact, url: contact_path(@contact) do |f| %>

这些是我的路线!

enter image description here

编辑2

日志! (这是单击编辑按钮时运行的内容)

enter image description here

2 个答案:

答案 0 :(得分:0)

您发布的错误是路由到show操作,而不是edit操作。

您可能需要更改edit操作的链接,并且您需要在编辑联系人链接中传递联系人ID,如下所示(假设您需要联系@contact变量):

<%= link_to 'Edit contact', edit_contact_path(@contact.id) %> 

答案 1 :(得分:0)

您不需要传递url Rails将确定路径是否用于创建或更新记录。

您必须对_formnew行为使用相同的edit

<%= form_for @contact do |f| %>
相关问题