我在保存表单值方面遇到了一个小问题。我做了一个更新一些数据库值的表单,我遇到了一个特殊的问题。
我为几个项目创建了3个变量,这里是表单中的前3个。
follow_up_logs / edit.html.erb
<div id="followuplog_attribute_update">
<p>
Baseline Target:
<%= f.number_field :baseline_target %>
</p>
<p>
Baseline Completed:
<%= f.number_field :baseline_completed %>
</p>
<p>
Baseline Reasons:
<%= f.text_field :baseline_completed %>
</p>
</div>
而且,为了向您展示模式,这里是第二个:
<div id="followuplog_attribute_update">
<p>
3 Week Target:
<%= f.number_field :week3_target %>
</p>
<p>
3 Week Completed:
<%= f.number_field :week3_completed %>
</p>
<p>
3 Week Reasons:
<%= f.text_field :week3_completed %>
</p>
</div>
以下是我创建它们的方法:
add_column:follow_up_logs,:baseline_target,:integer add_column:follow_up_logs,:baseline_completed,:integer add_column:follow_up_logs,:baseline_reasons,:string
add_column:follow_up_logs,:week3_target,:integer add_column:follow_up_logs,:week3_completed,:integer add_column:follow_up_logs,:week3_reasons,:string
问题是,只保存目标变量。所有其余部分都不保存到数据库中。因此,当我提交表单时,由于一些奇怪的原因,:baseline_target和:week3_target都保存到数据库,但没有别的。 (好吧,实际上已完成的变量保存为0,原因变量保留为零)
以下是我的控制器操作:
follow_up_logs_controller.rb
def new
@follow_up_log = FollowUpLog.new
end
def create
@follow_up_log = FollowUpLog.new(params[:follow_up_log])
if @follow_up_log.save
redirect_to @follow_up_log
else
render 'new'
end
end
def update
@follow_up_log = FollowUpLog.find(params[:id])
if @follow_up_log.update_attributes(params[:follow_up_log])
flash[:success] = "Log Updated"
redirect_to @follow_up_log
else
render 'edit'
end
end
def edit
@follow_up_log = FollowUpLog.find(params[:id])
end
我无法弄清楚发生了什么,我们将非常感谢任何帮助。我觉得它一定是我一直缺的东西=(
修改。拼写
答案 0 :(得分:2)
您重复属性:baseline_completed
。
<p>
Baseline Completed:
<%= f.number_field :baseline_completed %>
</p>
<p>
Baseline Reasons:
<%= f.text_field :baseline_completed %> ## <== should be :baseline_reasons
</p>
使用:week3_completed
这就是为什么当您提交表单时,text_field值会覆盖number_field值。并且您完成的变量保存为0,原因变量保留为nil
。