【问题标题】:association between two model in rails , controllerRails 中两个模型之间的关联,控制器
【发布时间】:2017-03-03 02:22:52
【问题描述】:

我找不到与我的关联有关的问题,但不断收到与关联相关的错误。我将 has_many 添加到 Schools 并将 belongs_to 添加到成员。

 class CreateMembers < ActiveRecord::Migration[5.0]
  def change
   create_table :members do |t|
    t.string :name
    t.string :email
    t.timestamps
  end
end

结束

 class CreateSchools < ActiveRecord::Migration[5.0]
def change
create_table :schools do |t|
  t.string :name

  t.timestamps
end

结束 结束

 class AddSchoolRefToMembers < ActiveRecord::Migration[5.0]
def change
  add_reference :members, :school, foreign_key: true
end

结束

控制器:

class MembersController < ActionController::Base
 before_action :set_school
def index
 @members = Member.all
end
def new
  @member = Member.new
end

def create
 @member = Member.new(member_params)
 @member.school = @school
 @member.save
 redirect_to members_path
end


private

def set_school
 @school = School.find(params[:school])

end

def member_params
  params.require(:member).permit(:name, :email,:school)
end

结束

【问题讨论】:

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

您应该分配该学校的 id,而不是分配 @school 本身:

def create
 @member = Member.new(member_params)
 @member.school = @school.id      # here it is @school.id 
 @member.save
 redirect_to members_path
end

关联使用 ID 而不是数组。 @school 完全返回学校记录,您只需要创建关联的 id。

【讨论】:

  • 这是错误的,在你的控制台中试试这个@member.school = @school,你可以。
  • 正如您在 rails 文档中所读到的,使用关联的正确方法是通过 ids:guides.rubyonrails.org/association_basics.html 我不使用 ids。
  • 编辑:我刚刚在控制台中尝试过,但它不起作用。当我将用户分配给 post.user_id 时,它返回 nil 并且不保存。它对你有什么作用?
  • 什么零?您尝试过的是示例a1 = Table1.new(a: 'test', b: 'test') a1.user = User.find(10) a1.save!
  • 问题是 a1.user 是类型引用,因此必须是一个 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多