更新:此问题底部的控制器代码可解决此问题。 我正在努力更新rails 3中的boolean confirmed_flag字段。背景:用户可以托管事件并可以通过考勤模型(HATM)参加活动。 我有一个form_for帮助器,它使用单选按钮允许访客接受或拒绝参加活动:
<%= form_for(@attendance) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<strong>Event description: </strong><%= @attendance.event.description %><br/>
<%= f.radio_button :confirmed_flag, 1 %>Accept
<%= f.radio_button :confirmed_flag, 0 %>Decline
这显示正常并挂钩到以下控制器更新操作:
def update
@attendance = Attendance.find(params[:id])
respond_to do |format|
if @attendance.update_attributes(params[:attendance][:confirmed_flag])
format.html { redirect_to(@attendance,
:notice => 'Attendance was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @attendance.errors,
:status => :unprocessable_entity }
end
end
end
正如您所看到的,我希望form_for的结果更新confirmed_flag,但是当我查看rails控制台中针对特定出席的值时,我已更新为表单中的“接受”,确认_flag的值仍然没有。
非常感谢任何帮助。
编辑:附加的相关服务器日志片段:
Started POST "/attendances/10" for 127.0.0.1 at 2011-03-21 23:42:18 +0000
Processing by AttendancesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Oz5qO/bcEJGmzIEH0xDOvtv7ecbF4wXXHpUtlIkDnfc=", "attendance"=>{"confirmed_flag"=>"1"}, "commit"=>"Update", "id"=>"10"}
[1m[36mAttendance Load (15.6ms)[0m [1mSELECT "attendances".* FROM "attendances" WHERE "attendances"."id" = 10 LIMIT 1[0m
Redirected to http://127.0.0.1:3000/attendances/10
Completed 302 Found in 109ms
更新:控制器中的以下代码完美运行。一如既往地感谢大家的帮助。
def update
@attendance = Attendance.find(params[:id])
respond_to do |format|
if
@attendance.update_attributes({:confirmed_flag => params[:attendance][:confirmed_flag]})
format.html { redirect_to(@attendance,
:notice => 'Attendance was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @attendance.errors,
:status => :unprocessable_entity }
end
end
end
答案 0 :(得分:2)
从您的评论到我的其他答案:
有没有办法使用 update_attribute方法(而不是 update_attributes)并以某种方式传入 收音机的价值 单细胞方法?
你可以手动完成:
@attendance.confirmed_flag = (params[:confirmed_flag] == "1")
@attendance.save
答案 1 :(得分:1)
我认为条件应该这样说。
@attendance.update_attributes({:confirmed_flag => params[:attendance][:confirmed_flag]})
答案 2 :(得分:0)
我认为如果删除更新语句的[:confirmed_flag]部分,它可能会有效。
所以只是:
if @attendance.update_attributes(params[:attendance])
我不是百分百肯定,但update_attributes方法可能正在寻找嵌套在“confirmed_flag”中的考勤字段