update_attributes无效

时间:2012-11-23 21:29:14

标签: ruby-on-rails activerecord

这是我的控制器

class ActivitiesController < ApplicationController 
  def exercises
    if current_user.userprofile.present? #chef whether there is a userprofile object
     @weeknum = current_user.userprofile.week 
     @dayly_activity = Activity.where(:week => 1, :day => 'Monday').first   
    end #end check userprofile     
  end

 def updatexercises
   respond_to do | format | 
    @dayly_activity = Activity.where(:week => 1, :day => 'Monday').first 
    @dayly_activity.update_attributes(params[:@dayly_activity])  
    @dayly_activity.save 
    format.html { render action: "exercises" }
  end
 end  
end

我的模板

<h1>WEEKLY EXERCICES</h1>

Day : <%= @dayly_activity.day %>

<%= form_for(@dayly_activity, :url => { :action => "updatexercises" }) do | f | %>
<table>
<tr>
    <td>Jogging:</td>
    <td>
        <% list = (0..20).to_a %>
        <%= f.select :jog, list %>
        x 0.1 km
    </td>
</tr>
<tr>
    <td>Bicycling:</td>
    <td>
        <% list = (0..10).to_a %>
        <%= f.select :bicycl, list %>
        km
    </td>
</tr>
<tr>
    <td>Push ups:</td>
    <td>
        <% list = (0..20).to_a %>
        <%= f.select :pushups, list %>
        x 10 times
    </td>
</tr>
<tr>
    <td colspan = "2"><%= f.submit %></td>
</tr>
  </table>

<% end %>

单击按钮时,不会保存Daily +活动对象。我错过了一些东西

修改

我试图以这种方式硬编码并保存到数据库中。

@dayly_activity.jog = 17
@dayly_activity.pushups = 13
@dayly_activity.save

显然,问题必须是 update_attributes

2 个答案:

答案 0 :(得分:1)

您需要使用params[:dayly_activity](删除@符号)。

另外,我会把这两行:

   @dayly_activity = Activity.where(:week => 1, :day => 'Monday').first 
   @dayly_activity.update_attributes(params[:dayly_activity])

respond_to区块之外(将它们置于其上方)。

您也可以删除@dayly_activity.save,update_attributes自动执行此操作,如果工作/失败,将返回true / false。

答案 1 :(得分:1)

[:@dayly_activity]

中有错误

在那段代码中

@dayly_activity.update_attributes(params[:@dayly_activity])  
@dayly_activity.save

save没用。 update_attributes保存记录。

最好检查update_attributes的结果。所以你可以捕获验证错误。

例如

if @dayly_activity.update_attributes(params[:dayly_activity]) 
  redirect_to dayli_activity_path, :notice => "Updated"
else
  render :edit
end