嵌套模型最佳实践 - rails

时间:2013-11-09 23:03:39

标签: ruby-on-rails ruby forms nested-attributes

假设我有两个模型model1model2,并且model2 belongs_to model1(相反,model1有很多model2)。现在假设我想在model2页面视图中创建model1/1(显示{1}}的页面,ID为1)。这是我做的:

model1

(@ model2在<%= form_for(@model2, remote: true) do |f| %> <%= f.text_field :title %> <%= f.submit "POST" %> <% end %> 控制器show方法中实例化)。这是最佳做法吗?我应该使用嵌套属性吗?

2 个答案:

答案 0 :(得分:1)

我不了解最佳做法,但我认为在其资源范围内尝试仅使用CRUD模型是最有意义的。也就是说,我更喜欢使用accepts_nested_attributes_for并通过表单提交到@model1创建它,但同样,它只是偏好 - 要么会起作用。

答案 1 :(得分:1)

CDub所说的是对的。但是,您可以通过以下方式实现嵌套的CRUD资源:

user = model1 post = model2

class user < ActiveRecord::Base
  has_many :posts
end

class post < ActiveRecord::Base
  belongs_to :user
end

在您的路线中,您可以这样做:

routes.rb

resources :users do
  resources :posts
end

并在你的帖子控制器中你可以这样做:

class UsersController < ApplicationController
  def new
    @post = current_user.posts.new
  end

  def create
    @post = current_user.posts.new(params[:post])
    if @post.save
      redirect_to user_posts_path(current_user, @post)
    else
      render :new
    end
  end
end

您可以通过执行以下操作来触发此路线:

<%= link_to 'new post', new_user_post_path(current_user) %>

并编辑:

<%= link_to 'edit post', edit_user_post_path(current_user, @post) %>

结帐:nested resources rails api