【问题标题】:nested models best practice - rails嵌套模型最佳实践 - rails
【发布时间】:2013-11-09 23:03:39
【问题描述】:
假设我有两个模型model1 和model2,而model2 属于model1(相反,model1 有很多model2)。假设现在我想从model1/1 页面视图创建一个model2(显示ID 为1 的model1 的页面)。这就是我所做的:
<%= form_for(@model2, remote: true) do |f| %>
<%= f.text_field :title %>
<%= f.submit "POST" %>
<% end %>
(@model2 在model1 控制器显示方法中实例化)。这是最佳做法吗?我应该使用嵌套属性吗?
【问题讨论】:
标签:
ruby-on-rails
ruby
forms
nested-attributes
【解决方案1】:
CDub 说的是对的。但是,您可以通过这种方式实现嵌套的 CRUD 资源:
用户 = 模型 1
帖子=模型2
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
【解决方案2】:
我不知道最佳实践,但我认为尝试并且仅在其资源范围内尝试 CRUD 模型是最有意义的。也就是说,我更喜欢使用 accepts_nested_attributes_for 并通过向 @model1 提交表单来创建它,但同样,这只是偏好 - 两者都可以。