【问题标题】:Rails - Creating a record in a join model but with an attributeRails - 在连接模型中创建记录但具有属性
【发布时间】:2011-01-10 23:32:22
【问题描述】:

我有一个我刚刚迁移的名为 EventUsers 的联接模型,它有一个 user_id、event_id 和一个我创建的名为 opinion:string 的属性

  create_table :events_users, :id => false do |t|
      t.integer :user_id
      t.integer :event_id
      t.string :opinion #  extra attribute I made
  end

和 事件.rb

   has_and_belongs_to_many :users

和用户.rb

   has_and_belongs_to_many :events

我可以添加到加入模型中

  @user = User.find(session[:user_id])
  @event = Event.find(params[:id])
  @user.events << @event

但在我这样做之前......如何将意见属性设置为某个字符串然后插入?

【问题讨论】:

    标签: ruby-on-rails join attributes insert


    【解决方案1】:

    如果您的连接模型除了外键之外还有任何字段,那么您不应该使用 HABTM 关系。您应该创建一个中间模型,例如 Opinion,并使每个模型相关,如下所示:

    class Event < ActiveRecord::Base
      has_many :opinions
      has_many :users, :through => :opinions
    end
    
    class User < ActiveRecord::Base
      has_many :opinions
      has_many :events, :through => :opinions
    end
    
    class Opinion < ActiveRecord::Base
      belongs_to :user
      belongs_to :event
    end
    

    更新:

    为了添加意见,您可能需要创建一个 RESTful 界面。我将首先在用户、事件或两者中添加嵌套路由

    map.resources :users do |user|
      user.resources :opinions
    end
    

    然后添加一个带有标准 RESTful 操作(新建、创建、编辑、更新等)和相应视图的意见控制器。关于如何构建标准的 restful 接口有很多资源,但我将从这些开始:

    http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default

    http://guides.rubyonrails.org/routing.html#nested-resources

    【讨论】:

    • 什么是 Choice 以及您如何使用它?
    • 我创建了一个名为 Love 的模型,但是将 Love 单数化为 Lofe 时出现错误,导致未初始化的常量错误。然后我创建了一个名为 Personal.... 的模型,其中 personal.rb => (belongs_to :user ; belongs_to :event) 和 user.rb => (has_many :personals ; has_many :events, :through => :personals) 和event.rb => ( has_many :personals ; has_many :users, :through => :personals ) 但我不断将属性 (:opinion) 视为未知属性错误。有什么想法吗?
    • 个人 'love') 仍然获得未知属性
    • 您对 RESTful 资源/接口的熟悉程度如何?我更新了我的答案以提供一点帮助,但这绝对是您想要的方式。那里有大量资源,SO 上的人一定会在您需要时提供帮助。
    猜你喜欢
    • 2011-02-17
    • 2022-01-21
    • 2015-12-03
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多