0

我有一个我称之为命名的方法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

4

2 回答 2

0

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

在路线.rb

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

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

然后,你可以做

verify_business_path(business)

在您的视图中生成 URL。

在您的控制器中:

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

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

希望有帮助!

于 2013-06-25T17:00:10.213 回答
0

您还需要传入用户。

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

verify_user(@user, @business)

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

于 2013-06-25T16:56:43.337 回答