使用参数路由自定义方法

时间:2013-06-25 16:39:41

标签: ruby-on-rails ruby-on-rails-3

我有一个名为verify的方法。它的工作是在我的表的一行上将布尔值从false更改为true。它接受一个参数(需要布尔值改变的对象),但我收到路由错误。

我的路线是:

        get 'verify/:u_business', :action => 'verify', :as => 'verify'

当我运行rake路由时,它看起来就像我需要的那样,但是当我运行网站时出现No route matches错误。

更新

使用路径的页面中的代码

          <table class="table table-striped" style:"width:100%;">
          <tr>
            <th style="width:20%">Name</th>
            <th style="width:40%">Address</th>
            <th style="width:30%">Telephone number</th>
            <th style="width:10%">Verify</th>
          </tr>
          <% @unverified.each do |b| %>
          <tr>
            <td><%= b.name %></td>
            <td><%= b.address %></td>
            <td><%= b.reward %></td>
            <td><%= link_to 'Verify', verify_user_path(b) %></td>
          </tr>
        <% end %>
      </table>

这是验证方法:

  def verify(u_business)
if current_user.admin?
  u_business.verified = true;
end

更多详情:

我有两个型号。 User模型和Business模型。每个用户都可以拥有一项业务。我正在处理的这个位允许管理员用户通过将verified?布尔值设置为true来验证业务。

当我运行rake路线时,我得到了这个:

verify_user GET /users/:id/verify/:u_business(.:format) users#verify

2 个答案:

答案 0 :(得分:0)

您也需要传入用户。

verify_user GET /users/:id/verify/:u_business(.:format) users#verify

verify_user(@user, @business)

否则它怎么知道如何生成完整的链接?

答案 1 :(得分:0)

更简单的设置方法(请原谅我的伪码)

在routes.rb

resources :business do
  get 'verify', :on => :member
end

这将添加像/ business / 1 / verify这样的GET路由,并且在没有任何特殊处理的情况下,在verify_business_path创建路由。

然后,你可以做

verify_business_path(business)

在视图中生成网址。

在您的控制器中:

def verify
  @business = Business.find params[:id]
  if current_user.admin?
    @business.verified = true
  end
  # save, render, etc
end

这将遵循最佳实践,因为您不需要特殊的:u_business参数,只需使用rails-provided:id。在这种情况下,用户是无关紧要的,因此像verify_user这样的路径在这里是不自然的。您只关心登录用户是否为管理员,因此该路由应附加到业务模型,而不是用户。

希望有所帮助!