Rails - 通过控制器更新布尔值

时间:2011-03-21 22:53:18

标签: ruby-on-rails

更新:此问题底部的控制器代码可解决此问题。 我正在努力更新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

3 个答案:

答案 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”中的考勤字段