【问题标题】:Rails partial view set value of form fieldRails部分视图设置表单字段的值
【发布时间】:2010-11-22 16:01:09
【问题描述】:

好的,所以我对 Rails 很陌生,我正在尝试执行以下操作但没有成功:

我有一个对象(来自我的 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])

【问题讨论】:

    标签: ruby-on-rails partial-views


    【解决方案1】:

    你可以这样写:

    <%= 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 %> 
    

    我希望这会有所帮助!

    【讨论】:

    • 感谢您的建议,尽管我实现了更好的 form_for 代码,但该值仍未设置。当我在上面的部分视图中使用代码(生成项目 html 代码的代码)时,值被设置。你知道为什么会这样吗?
    • 我已经在控制器中发布了我的视图代码,据我的 Ruby 知识告诉我,一个成员变量用于保存值,然后在视图中使用。但是当我尝试在视图中渲染部分时,我的“子部分”似乎并没有按照记录的方式渲染。我正在使用 v1.2.3 的 Rails(而且我对 Ruby(在 Rails 上)很陌生)..
    • 嘿,我想通了,我正在使用多个模型(我认为不值得一提..)所以我的问题是弄清楚如何以一种形式实现多个模型,我发现一些关于那个的链接.. 但是感谢你给我关于 form_for 的输入,让我进入了页面和关于多模型的想法,我现在也有一些更好的代码;-)
    猜你喜欢
    • 2023-03-12
    • 2021-08-04
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多