我已经选择了许多类似的问题/答案,但我只是没有得到我做错了什么 - 非常感谢任何帮助。
我正在尝试创建一个嵌套表单,这样当我添加一个新成员时,我可以从我可用的机构中选择他们成为其成员。
我有这两个模型(我知道他们缺乏验证)
class Institution < ActiveRecord::Base
has_many :members
accepts_nested_attributes_for :members
end
和
class Member < ActiveRecord::Base
belongs_to :institution
belongs_to :user
accepts_nested_attributes_for :institution
end
这是控制器:
class MembersController < ApplicationController
before_action :set_member, only: [:show, :edit, :update, :destroy]
def index
@members = current_user.members
end
def show
@member = current_user.members.find(params[:id])
end
def new
@members = current_user.members
@institutions = @members.institution
@member = Member.new
end
在new
def中,我使用@members = current_user.members
因为它似乎在index
def中正常工作。但是作业@institutions = @members.institution
不起作用 - 我收到了这个错误:
undefined method `institution' for # Member::ActiveRecord_Associations_CollectionProxy:0x000000028ce4f0>
如果我查看数据库,我看到成员确实有有效的institution_id
答案 0 :(得分:0)
问题是你正在尝试为记录集合调用机构方法,我不确定我提议的解决方案是否是你想要做的,但是你只能在一个成员记录上调用机构方法......
@institutions = [] #initializing array
@members.each do |member|
@institutions << member.institution
end
现在@institutions
填充了来自成员的一系列机构记录
答案 1 :(得分:0)
<强>集合强>
您的错误是由于您致电@members.institution
而造成的 - 您无法在集合上致电institution
- 仅限于此可用于单个对象(IE,如果您调用@member.institution
)
您想要做的事情可能是collection_select
允许member
加入一系列不同的institutions
:
#app/controllers/members_controller.rb
Class MembersController < ApplicationController
def new
@members = current_user.members
@member = Member.new
end
def create
@member = Member.new(member_params)
@member.save
end
private
def member_params
params.require(:member).permit(:institution_ids, :other, :member, :attributes)
end
end
#app/views/members/new.html.erb
<%= form_for @member do |f| %>
<%= f.collection_select :institution_ids, Institution.all, :id, :name %>
<%= f.submit %>
<% end %>