webform(Rails)编辑方法中的实例变量

时间:2014-07-02 13:55:08

标签: ruby ruby-on-rails-4

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错误吗?请赐教。

(在其他所有语言中,我都可以自由选择任何变量名称,而不会产生任何影响。)

1 个答案:

答案 0 :(得分:1)

看看at the docs for form_for。您没有给它创建表单的模型对象,您只需使用:section符号指定对象的名称。

相反,在(form_for(@section...))中传递要编辑的对象,这样可以获得您要查找的预先填充的字段。