我正在尝试从我的contacts
页面存档邮件(邮件模型名为users#show
)并且遇到了一些困难。
该链接位于@contacts.each
循环内,如下所示:
<%= link_to archive_contact_path(contact), method: :post do %>
<i class="icon ion-folder"></i>
<% end %>
在我的users_controller
内(因为这发生在我的users#show
页面上),以下方法存在于私有部分中:
def archive_contact
@contact = Contact.find(params[:id])
if @contact.update_attributes(archived: true)
redirect_to :back
flash[:notice] = "That message has been archived!"
else
redirect_to root_path
flash[:warning] = "Oops! Something went wrong!"
end
end
def unarchive_contact
@contact = Contact.find(params[:id])
if @contact.update_attributes(archived: false)
redirect_to :back
flash[:notice] = "That message has been unarchived!"
else
redirect_to root_path
flash[:warning] = "Oops! Something went wrong!"
end
end
最后,我有以下路线:
post "contact/:id/archive" => "contact#archive", as: "archive_contact"
post "contact/:id/unarchive" => "contact#unarchive", as: "unarchive_contact"
任何人都可以看到我收到uninitialized constant ContactController
错误的原因吗?
答案 0 :(得分:2)
post "contact/:id/archive" => "contact#archive", as: "archive_contact"
该路线告诉Rails:&#34;当向&#39;联系/ XX /存档&#39;发出请求时,获取ContactController的实例,并调用操作&#39; archive&#39;& #34;,&#34; as&#34;选项告诉rails创建名为routes的帮助程序&#34; archive_contact_path&#34;和&#34; archive_contact_url&#34;。
所以,如果你有一个UsersController并且方法是&#34; archive_contact&#34;,那么路由应该是
post "contact/:id/archive" => "users#archive_contact", as: "archive_contact"
就个人而言,我会创建一个ContactsController并将两个方法(un / archive)移动到该新控制器。链接显示在用户的节目视图中,但实际操作会影响联系人实例。
答案 1 :(得分:0)
我认为问题出在你的路线上。当您应该路由到'contact#archive'
时,您应该路由到'users#archive'
,因为行动archive
或archive_contact
所在的位置,而不是不存在的联系人控制器'contact#archive'
。