Rails(版本4)问题:我有一个名为" sections"我生成一个名为Sections的控制器,如下所示:
rails generate controller Sections index show edit new delete
例如,当我浏览到http://localhost:3000/sections/edit/4
时,我在网络表单中看不到预先填充的值(我希望编辑的数据库中的值)。
我需要添加一些细节。编辑和更新方法(在sections_controller.rb
中找到)创建为:
def edit
@sect = Section.find(params[:id])
end
def update
@sect = Section.find(params[:id])
if @sect.update_attributes(sect_params)
redirect_to(:action=>'index')
else
render('edit')
end
end
update
方法不需要模板文件,但edit
确实需要。{1}}方法。所以在view\sections\edit.html.erb
我们有:
<%= form_for(:section, :url => {:action => 'update', :id => @section.id}) do |f| %>
<table>
<tr>
<th> Field 1 </th>
<td> <%= f.text_field(:field1) %> </td>
</tr>
<tr>
<th> Field 2 </th>
<td> <%= f.text_field(:field2) %> </td>
</tr>
</table>
<%= submit_tag("Edit section") %>
<% end %>
因此编辑机制完美无缺,除了,我在编辑网页中看不到预先填充的字段(至少可以说不方便,特别是在大量的情况下)字段)。
我已经通过将@sect
(仅从方法编辑)实例变量重命名为@section
来更正此问题。但是,我对这个解决方案感到困惑和震惊。我不应该允许选择任何变量名称吗?这是一个Rails错误吗?请赐教。
(在其他所有语言中,我都可以自由选择任何变量名称,而不会产生任何影响。)
答案 0 :(得分:1)
看看at the docs for form_for。您没有给它创建表单的模型对象,您只需使用:section
符号指定对象的名称。
相反,在(form_for(@section...)
)中传递要编辑的对象,这样可以获得您要查找的预先填充的字段。