0

嗨,我对 Rails 很陌生,在尝试添加新的发布方法时遇到了麻烦。

我想创建一个启用用户的新方法。

所以我修改了我的用户控制器,使其具有以下方法

def enable

if (!@user.enabled)
  @user.enabled = true;
  if @user.save
    UserMailer.send_enabled_message(@user).deliver
    redirect_to users_url, notice: 'User was successfully enabled.'
  else
    redirect_to users_url, notice: 'Could not enable user.'
  end
else
redirect_to users_url, notice: 'Could not enable user.'
end

结尾

我在我的路线中添加了以下内容:

match 'users/:id' => 'users#enable', :via => 'post', :action => :enable

并将以下内容添加到显示用户表的视图中:

<td><%= link_to 'Enable', user, method: :enable, data: { confirm: 'Are you sure?' } %></td>

这一切似乎都有效,但我认为我的路线已经覆盖了我的登录帖子,因为我无法再登录了。我需要创建一个新表单还是可以像这样快速提交?

同样,当您使用 link_to 时,我该<%= link_to 'enable', enable_user(user) %>怎么做:我需要如何/在哪里创建该enable_user方法?

感谢 GoGoCarl 现在可以正常工作了。不得不将我的路线更改为:

resources :users do
    post 'enable', on: :member
end

我对此的看法:

<td><%= link_to 'Enable', enable_user_path(user), method: :enable, data: { confirm: 'Are you sure?' } %></td>
4

1 回答 1

3

只需更改 routes.rb 中的路由定义即可回答您的所有问题。删除您添加的行,并在您可能拥有的位置下:

resources :users

将其更改为:

resources :users do
  post 'enable', :on => :collection
end

这会在集合的资源级别添加一个处理程序(因此,/users),而不是成员(/users/2)。它会自动由用户控制器中的“启用”方法处理。

所以,第一个答案 - 是的,您正在匹配所有发布给用户的 URL,因此确实会覆盖登录 POST。如上所述定义将按照您想要的方式路由。

第二个答案,你如何获得网址?好吧,既然它是这样路由的,你可以运行 rake routes 来查看定义的路径是什么。现在,我将免除您的麻烦:

enable_users_path

所以你可以这样做:

link_to 'enable', enable_users_path

同样,通过上述方式定义路由,为您生成此路径方法。如果您遇到这种情况,您也可以通过属性定义此方法。

因此,如果您进行上述更改,您应该:

  1. 能够取回您的登录信息(以及向用户发送的任何其他 POST 方法)
  2. 有一个方法 enable_users_path 来获取 URL
  3. 能够发布到 /users/enable

那应该让你继续前进。有关路由的更多信息:http: //guides.rubyonrails.org/routing.html

于 2013-07-04T05:38:24.280 回答