新手问题 Rails 路由问题

chengkai1853 · 2015年08月12日 · 最后由 chengkai1853 回复于 2015年08月13日 · 1925 次阅读

新手 rails 写项目时候遇到一个问题,例如 QQ 那种模式的 web 应用。这里有三个模型,用户(User) , 群组 (Gropu),加入群组的申请 (GroupApplication)。申请的时候管理员可以决定通过(agree) ,拒绝 (reject)。那么这个 agree 和 reject 方法怎么写啊,在 rails 怎么路由? 默认有如下路由 由于这种问题,不知道怎么去 google,所以请大大指教!

resources :group_application do
  member do
    put :agree
    put :reject
  end
end

接楼上的,不过个人建议把agreereject放到namespace :admin下 具体怎么去写,楼主参考这里

#1 楼 @rei 按照这种写法路由是这样的 它路由到了 group_application,目前我没有这个 controller 啊。 我现在是把 agree 和 reject 的方法写在了 applications 的 controller 里面。于是我试着修改成

resources :groups do 
  resources :applications 
end

resources :applications do 
   member do
    put :agree
    put :reject
   end
end

GroupApplication 目前都是显示在 group show 的页面中。于是_application.html.erb

<div class="panel panel-default">
  <div class="panel-heading"> <%= @group.name%> </div>
  <div class="panel-body"> <%= application.content %> </div>
  <div class="panel-footer"> <%= current_user.email %></div>
  <%= form_for agree_application_path do |f| %>
    <%= f.submit 'Submit', :disable_with => 'Submiting...' , class:"btn btn-primary" %> 
  <% end %>
</div>

但是一旦点击 submit 之后就会报错 No route matches [POST] "/groups/1"

请问应该怎么处理?

resources :groups do 
  resources :applications do
    member do
      put :agree
      put :reject
    end
  end
end

你需要用的是 嵌套路由,应该用 4 楼写法,但你的 form_for 用法不对,应该是:

<%= form_for [@group, @application] do |f| %>

#4 楼 @rei 非常感谢大大,借着大大的指引,回头仔细看了一遍渲染和路由,知道怎么做了

#5 楼 @liwei78 非常感谢,重新看了一遍 form_for 的文档,较之前明白了些

需要 登录 后方可回复, 如果你还没有账号请 注册新账号