Rails部分视图设置表单字段的值

时间:2010-11-19 16:07:19

标签: ruby-on-rails partial-views

好吧所以我对Rails很陌生,并试图做以下事情但没有成功:

我有一个包含项目的Object(来自我的Active Record),该项目包含n个子项目,其中包含n个任务。现在,对于每一个我想要一个局部视图。

所以我从项目视图中使用以下代码渲染子项目:

<%= render(:partial => 'subproject', :collection =>  @project.sub_projects) %>

在我的子项目局部视图中称为_subproject.rhtml(将代码添加到一个好的ol Rails 1.2.3项目中),所以我可以访问这样的数据:

<%= subproject.name %>

这将打印出名称,但是当我尝试生成文本字段时,这将无效:

<%= text_field 'subproject', 'name' %>

但这会:

<%= text_field 'subproject', 'name', :value => subproject.name %>

我做错了什么?


编辑:由于我的问题而更改的标题不是传递值,而是在表单字段中显示它。


Edit2:按照我的控制器代码要求:

@project = Project.find(params[:id])

1 个答案:

答案 0 :(得分:3)

你可以这样写:

<%= render(:partial => 'subproject', :collection =>  @project.sub_projects) %>

作为

<%= render :partial => @project.sub_projects %>

这将为每个子项目呈现sub_projects/_sub_project.html.erb部分。一点点捷径。

这:

<%= text_field 'subproject', 'name' %>

创建一个名为:subproject [name]的text_field,但不给它一个值。您需要传递要设置的值(有效的代码)。

现在更常用的方法是使用form_for:

<% form_for @subproject do |f| %> 
  <%= f.text_field :name %>
<% end %>

或者如果您使用的是formtastic(https://github.com/justinfrench/formtastic),这太棒了,你会写:

<% semantic_form_for @subproject do |f| %> 
    <%= f.input :name %>
<% end %> 

我希望这有帮助!