我的复选框列不适用于Netzke中的关联?

时间:2015-03-07 00:25:26

标签: ruby-on-rails extjs netzke

我通过连接表设置了多对多关系,其组件类似于boss_clerks演示。 (我已经包含了一个人为的例子)。一切都有效,除了关联member__available上的:boolean的CheckColumn。

在布尔值是模型属性而不是关联属性的网格上,checkcolumn工作正常。但是,当我从关联指定布尔值时,如member__available,则不会显示复选列。要使checkcolumn工作,我手动指定xtype和其他列配置。然后复选框将从false更新为true,但是一旦true将不响应“取消选中”,它将陷入真实状态(现在保存在数据库中)。

extjs 4.2.0.663
netzke-core 0.9.0
netzke-basepack 0.9.0
rails 3.2.11

谢谢!

class Member
  has_many :teams, :through => :team_members
  attr_acessible :available
end

class Team 
  has_many :members, :through => :team_mebers
end

class TeamMember
  belongs_to :team
  belongs_to :member
  attr_acessible :role
end

class TeamGrid 
    def configure(c)
        c.model = "Team"
    end
end

class TeamMemberGrid
    def configure(c)
        c.model = "TeamMember"
        c.columns = [
            :member__name,
            :member__specialty,
            { name: :member__available, editor: { xtype: :checkbox}, xtype: :checkcolumn, attr_type: :boolean },
            :role
        ]
    end
end

1 个答案:

答案 0 :(得分:0)

使用虚拟属性很容易解决这个问题,例如:

class TeamMember
  delegate :available, to: :member, allow_nil: true

  def available=(v)
    member && member.update_attribute(:available, v)
  end
end


class TeamMemberGrid
  def configure(c)
    c.model = "TeamMember"
    c.columns = [
      :member__name,
      :member__specialty,
      { name: :available, attr_type: :boolean, read_only: false },
      :role
    ]
  end
end

默认情况下,Netzke将虚拟属性设置为只读,这就是您需要read_only: false的原因。