我的 Rails 应用程序中有一个会议模型,可以has_many出席情况(考勤模型(。创建会议的人员在出席表中获得一个具有管理员角色的条目,他们从选择输入中选择的人员也会以与会者角色添加到出席表中。
因此,我的会议模型accepts_nested_attributes_for :attendances
,在meetings_controller创建方法中,我执行以下操作:
def new
@meeting = Meeting.new
@meeting.attendances.new
end
def create
@meeting = Meeting.new(meeting_params)
@meeting.attendances.first[:role] = 1 #sets the role of the chosen user to attendee
respond_to do |format|
if @meeting.save
# Create the Owner Attendance
@owner = @meeting.attendances.new(
user_id: current_user.id,
meeting_id: @meeting,
role: 0
)
@owner.save
format.html { redirect_to @meeting, notice: 'Meeting was successfully created.' }
format.json { render :show, status: :created, location: @meeting }
else
format.html { render :new }
format.json { render json: @meeting.errors, status: :unprocessable_entity }
end
end
end
在会议所有者返回编辑会议之前,这工作正常且良好。
因为form.fields_for :attendances do |att|
循环遍历与会议关联的两个出席。
<%= form.fields_for :attendances do |att| %>
<%= att.label :user_id, "Who are you meeting with?" %>
<%= att.select :user_id,
options_for_select(current_user.company.users.map{ |user| [user.name, user.id] }, :user_id) %>
<% end %>
当会议所有者正在编辑现有会议时,我试图让该选择字段仅显示角色="与会者"的 @meeting.attendances。
我想有一种"Rails"方法可以解决这个问题,不包括我将逻辑块放在我的_form部分。
>fields_for
接受第二个参数,它是一个记录数组
def edit
@attendees = @meeting.attendances.where(role: :attendee)
end
<%= form.fields_for :attendances, @attendees do |att| %>
...
这将仅打印嵌套字段以供@attendees
或者,您可以使用多选
form.select :user_ids, current_user.company.users.map { |user| [user.name, user.id] }, {}, multiple: true