更改布尔值

时间:2017-04-16 00:11:32

标签: ruby-on-rails

我正在尝试从我的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错误的原因吗?

2 个答案:

答案 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',因为行动archivearchive_contact所在的位置,而不是不存在的联系人控制器'contact#archive'