【问题标题】:update_attributes is not workingupdate_attributes 不起作用
【发布时间】:2012-11-23 21:29:13
【问题描述】:

这是我的控制器

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+activity 对象没有被保存。我错过了什么

编辑

我尝试过用这种方式进行硬编码并将其保存到数据库中。

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

显然,问题一定出在 update_attributes

【问题讨论】:

  • params[:@dayly_activity] 删除 @
  • 这是唯一的问题吗?我删除了@符号,它仍然没有保存。

标签: ruby-on-rails activerecord


【解决方案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。

【讨论】:

    【解决方案2】:

    [:@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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多