Ruby on rails rails如何执行f.parent.text_字段:name

Ruby on rails rails如何执行f.parent.text_字段:name,ruby-on-rails,ruby-on-rails-3,nested-forms,fields-for,Ruby On Rails,Ruby On Rails 3,Nested Forms,Fields For,我需要将日记账和日记账条目中的字段放在表的一行中,并且能够在同一视图中添加和显示多个数据条目行。(即一个行表,并使用带有accepts\u嵌套属性的link\u to\u add\u字段来扩展表中的行) 必须存在某种类型的f.parent.text_字段或f.object.parent.text_字段 我试着做如下的事情 <table> #in a :pm namespace <%= form_for [:pm, @lease] do |f| %> <%= f.

我需要将日记账和日记账条目中的字段放在表的一行中,并且能够在同一视图中添加和显示多个数据条目行。(即一个行表,并使用带有accepts\u嵌套属性的link\u to\u add\u字段来扩展表中的行)

必须存在某种类型的f.parent.text_字段或f.object.parent.text_字段

我试着做如下的事情

<table>
#in a :pm namespace
<%= form_for [:pm, @lease] do |f| %>
  <%= f.fields_for :journal_entries do |journal_entries| %>
    <%= render "journal_entry_fields" , f: journal_entries %>
  <% end %>
  <%= link_to_add_fields "+ Add transactions", f, :journal_entries %>
<% end %>
</table>

#在:pm名称空间中
_日记账\条目\字段.html.erb

<fieldset>
  <tr>
    ## HERE IS WHAT I'M LOOKING FOR <<<<<<<<<<<!!>>>>>>>>>>>>>
    <td><%= f.parent.text_field :dated %></td>
    <td><%= f.parent.text_field :account_name %></td>
    <td><%= f.text_field :credit %></td>
    <td><%= f.text_field :notes %></td>        
  </tr>
</fieldset>
<fieldset>
  <tr>
    <td><%= f.text_field :dated %></td>
    <td><%= f.text_field :account_name %></td>
    <%= f.fields_for :journal_entries do |journal_entry| %>
      <td><%= journal_entry.text_field :credit %></td>
      <td><%= journal_entry.text_field :notes %></td>
    <% end %>   
  </tr>
</fieldset>

##这是我要找的>>
我的模型

class Lease < ActiveRecord::Base
  has_many :journals, :order => [:dated, :id] #, :conditions => "journals.lease_id = id"
  has_many :journal_entries, :through => :journals  
  accepts_nested_attributes_for :journal_entries , :allow_destroy => true
  accepts_nested_attributes_for :journals ,  :allow_destroy => true    
end

class Journal < ActiveRecord::Base
  belongs_to :lease, :conditions =>  :lease_id != nil   
  has_many :journal_entries
  accepts_nested_attributes_for :journal_entries , :allow_destroy => true
end

class JournalEntry < ActiveRecord::Base
  belongs_to :journal
end
class-Lease[:dated,:id]#,:conditions=>“journals.lease\u id=id”
有多个:日记账分录,:至=>:日记账
接受以下项的\u嵌套\u属性\u:journal\u entries,:allow\u destroy=>true
接受:日记账的\u嵌套\u属性,\u,:允许\u销毁=>true
结束
类日志:租约\u id!=无
有许多:日记账分录
接受以下项的\u嵌套\u属性\u:journal\u entries,:allow\u destroy=>true
结束
类JournalEntry
我使用的是Rails 3.2.12和ruby 1.9.3

我想看看这是否是一个比目前面临的问题更好的解决方案:

我做了一个不同的线程,因为我认为它是如此彻底的不同

谢谢, 菲尔

试试这个:

RailsCasts模型关系与您的模型关系相似,但您需要更改HTML

RailsCasts模型:
调查>问题>答案


您的模型:
Lease>Journal>JournalEntry

根据我对您的用例的理解,您希望以一种租赁形式创建日志及其条目。因此,您可以将这两个字段的_设置为如下所示:

<table>
  #in a :pm namespace
  <%= form_for [:pm, @lease] do |f| %>
    <%= f.fields_for :journals do |journal| %>
      <%= render "journal_entry_fields" , f: journal %>
    <% end %>
  <%= link_to_add_fields "+ Add transactions", f, :journals %>
 <% end %>
</table>

#在:pm名称空间中
_日记账\条目\字段.html.erb

<fieldset>
  <tr>
    ## HERE IS WHAT I'M LOOKING FOR <<<<<<<<<<<!!>>>>>>>>>>>>>
    <td><%= f.parent.text_field :dated %></td>
    <td><%= f.parent.text_field :account_name %></td>
    <td><%= f.text_field :credit %></td>
    <td><%= f.text_field :notes %></td>        
  </tr>
</fieldset>
<fieldset>
  <tr>
    <td><%= f.text_field :dated %></td>
    <td><%= f.text_field :account_name %></td>
    <%= f.fields_for :journal_entries do |journal_entry| %>
      <td><%= journal_entry.text_field :credit %></td>
      <td><%= journal_entry.text_field :notes %></td>
    <% end %>   
  </tr>
</fieldset>


尽管每次动态添加新记录时都需要初始化日记账分录。我现在不能帮你,因为我不在电脑上。

你能详细说明你想要实现的目标吗?为什么要在
\u journal\u entry\u fields.html.erb
中再次添加
?日期
字段的用途是什么?你为什么要从协会表格中分配它?如果两个不同的
日记账分录
的父项的
日期有两个不同的值
,会发生什么情况?这对我来说没什么意义…修正了,它本来就不应该在那里:)抓到马诺伊了。我试着把日记账模型和日记账分录模型的输入放在同一个空间。我知道,如果你试图在有多个孩子的情况下更改它,可能会使家长感到困惑,但如果家长有多个孩子,禁用家长是可以避免的(允许它只编辑第一个或最后一个子项的父项…也就是说,是否可以执行某种类型的f.parent.text_字段:属性?是否要在创建租约时创建日记账及其条目?然后需要使用两级深嵌套。您似乎已经有了它,但需要将其添加到视图文件中。雷克萨斯知道my的理解是正确的。是的,当我创建/更新租约时,我希望能够创建/编辑该租约的日记账和日记账分录。我将尝试将它们拆分而不是合并,这可能更适合于数据。但如果有一种懒散的方法,我不介意:)是的,我在我的很多作品中都特别使用了那一集,但在这个案例中它不起作用。我有其他的模型在工作,但魔术在这个案例中不起作用。关于f.父对象的想法呢?我想不出一个方法来做父对象。我会尝试将模型嵌套2深。是的,这可能[当然]最恰当的方式是,语言似乎必须支持我正在尝试做的事情[即使有点不合适]。谢谢Sam。这不是我希望得到的解决方案,但可能是最好的解决方案。如果用户试图更改一个父记录,并且有多个子记录,则f.parent可能会导致冲突。这里唯一的问题是,如果有大量日记账分录,它将向右运行(生成一个难看的表)。如果有一种更简单的方法为日记账分录制作多行,那就更好了。我的解决方案与此类似,只是我使用div(和floating)而不是简单的表格。谢谢你,Manoj!是的,我实际上也在考虑向你提出同样的建议。顺便说一句,不客气!:)现在我只需要弄清楚如何在每次添加记录时初始化日志条目。我原以为可以从控制器
@lease=lease.new;journal=@lease.journals.build;journal.journal\u entries.build
No,视图页面一呈现,控制器的一部分就完成了。所以现在就轮到助手或查看文件如何处理它了。我认为您可以尝试处理嵌套字段的动态添加。对于初始化日志项,您可以检查它是否已经初始化,或者在部分中将其初始化为
journal\u ent=journal.object.journal\u entries.build journal.object.journal\u entries.blank?