Rails - обновление логического значения через контроллер - PullRequest
0 голосов
/ 22 марта 2011

ОБНОВЛЕНИЕ: код контроллера в нижней части этого вопроса решает проблему. Я изо всех сил пытаюсь обновить логическое поле Verified_flag в rails 3. Справочная информация: пользователи могут размещать события и могут посещать события через модель посещаемости (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 обновляли подтвержденный_флаг, но когда я смотрю на значения в консоли rails для определенной посещаемости, я обновил до 'Принять' в форме, значение подтвержденного_флага остается ноль.

Любая помощь с благодарностью.

Редактировать: соответствующий фрагмент журнала сервера прилагается:

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 ]

2 голосов
/ 22 марта 2011

От вашего комментария до другого моего ответа:

есть ли способ использовать метод update_attribute (а не update_attributes) и как-то передать в значение радиоблока к метод единственного числа?

Вы можете сделать это вручную:

@attendance.confirmed_flag = (params[:confirmed_flag] == "1")
@attendance.save
1 голос
/ 22 марта 2011

Я думаю, что условное должно сказать это.

@attendance.update_attributes({:confirmed_flag => params[:attendance][:confirmed_flag]})
0 голосов
/ 22 марта 2011

Я думаю, что это может сработать, если вы удалите часть [: подтвержденный_фрагмент] вашего оператора обновления.

Так что просто:

if @attendance.update_attributes(params[:attendance])

Я не уверен на 100%, ноМетод update_attributes может искать поля посещаемости, вложенные в «Verified_flag"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...