这是我的控制器
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
答案 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