2

我注意到,当我在其中一个表中创建一条记录,并且我有某种与该表关联的数据时,它已经添加了 1 条记录,但它是 nil 吗?

例如:

列出控制器

  def show
    @list = List.find(params[:id])
    @idea = @list.ideas.build
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @list }
    end
  end

列表模型

has_many :ideas

理念模型

belongs_to :list

列表 > show.html.erb

<%= @list.ideas.each do |idea| %>
  <div>
    <div class="list_idea_desc"><%= idea.description %></div>
    <div><%= link_to 'Show', idea %></div>
    <div><%= link_to 'Destroy', idea, method: :delete, data: { confirm: 'Are you sure?' } %>   </div>
  </div>
<% end %>

我得到这个记录:

[#<Idea id: nil, name: nil, description: nil, 
picture: nil, created_at: nil, updated_at: nil, list_id: 1>]

当我创建一个新列表时,这条idea记录会自动插入到我的数据库中。为什么会这样?

4

3 回答 3

4

new和之间的区别在于buildbuild新创建的对象添加到集合中:

代替:

@idea = @list.ideas.build

和:

@idea = @list.ideas.new

或者如果你只想使用build,你应该

代替:

<%= @list.ideas.each do |idea| %>

和:

<%= @list.ideas(true).each do |idea| %>

true丢弃想法的缓存副本并返回数据库。

于 2013-05-02T05:42:14.363 回答
1

尝试这个:

<%= @list.ideas.each do |idea| %>
  <% if idea.present? %>
  <div>
    <div class="list_idea_desc"><%= idea.description %></div>
    <div><%= link_to 'Show', idea %></div>
    <div><%= link_to 'Destroy', idea, method: :delete, data: { confirm: 'Are you sure?' } %>                   </div>
  </div>
  <% end %>
<% end %>

使用礼物?在记录保存时间的条件也。

于 2013-05-02T05:18:08.083 回答
1

这是由于@idea = @list.ideas.build代码行,删除它并检查它。它可能适用于您的观点。

<% @idea = @list.ideas.build %>
<%= form_for [@list,@idea] do |f| %>
于 2013-05-02T05:02:54.573 回答