ruby-on-rails - Rails form_for 多个不同的类对象?

标签 ruby-on-rails ruby ruby-on-rails-4

有没有办法在 Rails 4 中的一个 form_for 中拥有多个不同的模型?

也许是这样的

# gives error
<%= form_for ([@user, @pet]), url: some_path do |u, p| %>

最佳答案

通常类似的事情是通过两个模型的关联来完成的。在这种情况下,我将在这里做出一些假设。我假设您有两个模型 userpet。我假设宠物属于用户,并且用户可以拥有许多宠物。通过这种关联,pet 模型将具有一个 user_id 属性,用于将用户与该宠物关联起来。

用户模型

attr_accessible :name, :pets_attributes
has_many :pets
accepts_nested_attributes_for :pets

宠物模型

attr_accesible :user_id, :name
belongs_to :user

就我个人而言,我非常喜欢使用 simple_form,因为它具有很酷的关联功能。

查看

<% simple_form_for @user do |f| %>
  <%= f.input :name %>
  <%= f.simple_fields_for :pets do |p| %>
    <% p.input :name %>
  <% end %>
<% end %>

Controller

在您的 Controller 中(假设这是一个操作)。这将为用户创建一条线并为宠物构建三个点。

def new
  @user = User.new
  3.times do
    @user.pets.build
  end
end

路线

对于路由,您可能需要考虑的一件事是将它们设置为与此类似。这将使您的路线变得更漂亮,因为宠物表演操作也会引用用户 /users/:user_id/pets/:pet_id

resources :users do
  resources :pets
end

关于ruby-on-rails - Rails form_for 多个不同的类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192495/

相关文章:

ruby-on-rails - Ruby 的 range step 方法导致执行速度很慢?

ruby-on-rails - 使用 :limit in to_json Statement?

ruby-on-rails - 控制 Rails 初始化程序加载顺序(可能需要新的 Rails 初始化 Hook )

ruby-on-rails - 通过过滤事件记录 has_many

ruby-on-rails - Rails Postgres 不断告诉我用户不存在

ruby-on-rails - rails : Storing binary files in database

ruby-on-rails - Rails 中的 `flash` 如何成为应用程序的全局地址?

ruby - 使用 $& 全局变量的编程别名方法

ruby-on-rails - Rails,嵌套的 has_many 关联,找到所有 child

ruby-on-rails-4 - 耙分贝 :migrate on aws elastic beanstalk