Rails 类似 OrganizationMember 这种带有前缀的 model 如何写 controller 和 view?

linjunhalida · 2014年12月16日 · 最后由 linjunhalida 回复于 2014年12月16日 · 2068 次阅读

设计一个 model:OrganizationMember,它是属于Organization的。

在 organization.rb 里面:

class Organization < ActiveRecord::Base
  has_many :members, class_name: :OrganizationMember
end

在 routes.rb:

resources :organizations do
  resources :member, controller => "organization/members"
end

在 controller 里面,我需要用 cancan:

class Organization::MembersController < Organization::BaseController
  load_and_authorize_resource :member, class: OrganizationMember, through: :organization, through_association: :members
end

在 form 里面,我需要用 form_for:

= form_for @member, url: organization_member_path(@organization, @member) do |f|
  ...

写起来真是累呀,大家知道有什么更好的方法吗?

要不然就缩写成 org 吧。

@yakjuly 搞定了。看来学习 rails 源码还是有帮助的。翻到了关键字 use_relative_model_naming。

按照: https://coderwall.com/p/heed_q/rails-routing-and-namespaced-models

定义类:Organization::Member,route 里面向上面一样嵌套,然后为了防止生成organization_organization_member_path,在organization.rb里面加上:

def self.use_relative_model_naming?
  true
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号