【问题标题】:Rails 4 Tagging users on a modelRails 4 在模型上标记用户
【发布时间】:2016-05-08 10:29:51
【问题描述】:

标记用户的最佳方法是什么?如果你有一个团队模型,当你创建一个团队时,你想添加成员,这个架构将如何工作?

我正在考虑仅将行为用作 tanggble 并将其用于用户,但不确定这是否是最好的方法?是否还有其他宝石可以做这样的事情?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 tags


    【解决方案1】:

    要添加到@tpbowden 的答案,如果您只是想“标记”用户,您不妨使用has_and_belongs_to_many

    # app/models/user.rb
    class User < ActiveRecord::Base
       has_and_belongs_to_many :teams
    end
    
    # join table "teams_users" - team_id | user_id
    
    # app/models/team.rb
    class Team < ActiveRecord::Base
       has_and_belongs_to_many :users
    end
    

    这将允许您使用singular_collection_ids 方法,您可以使用该方法定义“团队”中的哪个用户:

    #app/controllers/teams_controller.rb
    class TeamsController < ApplicationController
       def edit
         @team = Team.find params[:id]
       end
    
       def update
         @team = Team.find params[:id]
         @team.update team_params
       end
    
       private
    
       def team_params
         params.require(:team).permit(user_ids: [])
       end
    end
    
    #app/views/teams/edit.html.erb
    <%= form_for @team do |f| %>
       <%= f.collection_select :user_ids, User.all, :id, :name %>
       <%= f.submit %>
    <% end %>
    

    在没有任何额外依赖的情况下,这与“标记”非常接近。

    【讨论】:

    • 嵌套属性也可以吗?会有什么不同?
    • 在此答案代码的上下文中,仅当您想 创建 group / user 作为关联对象时才需要 nested_attributes。如果您只想将用户分配到现有组,以上就足够了
    【解决方案2】:

    听起来您正在寻找has many through 关系。这将要求您有一个名为 team_members 的联接表来记录哪些用户是每个团队的成员,具有 user_idteam_id 列。因此,例如,您的 Team 模型将具有如下所示的关系:

    has_many :users, through: :team_members
    

    这会在 Team 上定义用于添加、查询和删除用户的适当方法。

    更多信息是here

    【讨论】:

    • 嵌套属性呢?这种方法也行吗?
    • 是的,您可以为用户和加入模型拥有嵌套属性。如果您遇到困难,请查看this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多