ActiveRecord:如何在不包含尚未保存的用户的情况下获取所有用户的汽车?

时间:2014-11-22 01:41:47

标签: ruby-on-rails ruby rails-activerecord

我在users/show.html.erb上有一个表单,可以为该用户创建新的car

<%= form_for(user.cars.build(user_id: @user.id, garage_id: @user.garage.id)) do |f| %>
    <%= f.hidden_field :user_id, value: @user.id %>
    <%= f.hidden_field :garage_id, value: @user.garage.id %>

    <%= f.submit "Book It", class: "btn btn-default btn-xs appointment-submit-button" %>
<% end %>

在页面上显示此表单后,我列出了所有用户的汽车。然而,当我循环通过用户的汽车时,它正在拿起一辆新建的但未保存的汽车(大概是因为上面的形式)。有没有办法要么a)在提交表格之前阻止汽车的建造,或者b)让汽车列表只循环通过那些已经保存的用户汽车?

我尝试在user.rb中添加一个函数:

def saved_cars
    self.cars.where(!is_new?)
end

所以我可以循环使用它,但我无法弄清楚语法。任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:3)

要了解@ marflar的答案,当您浏览用户的汽车时,您可以检查汽车是否为new_record?并决定渲染它。

= render @user.cars

然后在部分:

<% unless car.new_record? %>
  # render your html here;
<% end %>

可替换地:

<% if car.persisted? %>
  # render your html here;
<% end %>

答案 1 :(得分:2)

您想要ActiveRecord的new_record?方法及其小朋友persisted?