在我的Rails 4应用程序中,我有用户,每个用户可以属于任意数量的组织,但这种关系也可以是'member'
或'administrator'
。
我有三个模型:Organization
,User
和UserOrganizationRelationship
包含user_id:integer
,organization_id:integer
和relationship:string
class Organization < ActiveRecord::Base
has_many :user_organization_relationships
has_many :users, :through => :user_organization_relationships
accepts_nested_attributes_for :user_organization_relationships
end
class User < ActiveRecord::Base
has_many :user_organization_relationships
has_many :organizations, through: :user_organization_relationships
end
class UserOrganizationRelationship < ActiveRecord::Base
belongs_to :user
belongs_to :organization
self.primary_key = :user_id
Administrator = 'administrator'
Member = 'member'
end
我创建了一个表单,可以修改每个成员的关系类型
= form_for @organization do |f|
= f.fields_for :user_organization_relationship do |u|
= u.label :relationship, @organization.users[u.index].username
= u.select :relationship, options_for_select([UserOrganizationRelationship::Administrator, UserOrganizationRelationship::Member])
我遇到的问题是,当用户提交表单时,user_organization_relationship
中的记录不会更新,我也不会收到任何错误。这是接收帖子数据的控制器:
class OrganizationsController < ApplicationController
...
def update
if @organization.update!(organization_params)
redirect_to @organization, notice: 'Organization was successfully updated.'
else
render action: 'edit'
end
end
private
def organization_params
params.require(:organization).permit(user_organization_relationships_attributes: [:id, :user_id, :organization_id, :relationship])
end
...
end
调试更新方法显示参数通过帖子数据和organization_params
过滤器。