Rails:当我只想编辑集合中的一个对象时,如何使用fields_for选择集合



我的 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

最新更新