gpt4 book ai didi

ruby-on-rails - 如何在Rails中建立多对多关系

转载 作者:行者123 更新时间:2023-12-04 03:01:52 25 4
gpt4 key购买 nike

我是Rails的新手,正在尝试在Rails项目中建立多对多关系。我有一个小策略,但是我不确定它是否正确。

目的:
我有一个用户表和一个组表。用户可以是许多组的一部分,并且每个组可能有许多用户。

策略:

  • 将用户迁移设置为具有名称:string
  • 将组迁移设置为具有名称:string
  • 设置Join表迁移
  • 设置用户模型,使其具有has_and_belongs_to_many:groups
  • 设置组模型,使其具有has_and_belongs_to_many:users

  • 这是正确的策略吗?谢谢!

    答案的 铁路广播摘要:
    对于感兴趣的人-Railcast建议您使用has_many:through关联,因为上述策略的局限性在于您不能添加额外的特定于关系的信息。

    checkout : http://kconrails.com/tag/has_many/

    最佳答案

    首先,我假设您有一个带有“名称”字段的用户模型和一个带有“名称”字段的组模型。

    您需要在用户和组之间建立一个模型。我们称其为分组:

    rails g model grouping user_name:string group_name:string

    在分组模型(grouping.rb)中,您输入:
    belongs_to :user  
    belongs_to :group

    在用户模型中:
    has_many :groupings, :dependent => :destroy
    has_many :groups, :through => :groupings

    并在组模型中:
    has_many :groupings, :dependent => :destroy  
    has_many :users, :through => :groupings

    在用于编辑或更新用户个人资料的_form文件中,您输入了:
    <div class="field">
    <%= f.label :group_names, "Groups" %>
    <%= f.text_field :group_names %>
    </div>

    最后,用户类必须知道如何处理表单中的信息。插入到user.rb中:
      attr_writer :group_names
    after_save :assign_groups

    def group_names
    @group_names || groups.map(&:name).join(' ')
    end

    private

    def assign_groups
    if @group_names
    self.groups = @group_names.split(/\,/).map do |name|
    if name[0..0]==" "
    name=name.strip
    end
    name=name.downcase
    Group.find_or_create_by_name(name)
    end
    end
    end

    Assign_groups删除空格,并将所有单词缩小写,因此不会有多余的标签。

    现在,您可以在其个人资料的显示文件中显示用户的组:
    <p>Groups:
    <% @user.groups.each do |group|%>
    <%= group.name %>
    <% end %>
    </p>

    希望有帮助。

    关于ruby-on-rails - 如何在Rails中建立多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10259554/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com