假设我有两个模型model1
和model2
,并且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方法中实例化)。这是最佳做法吗?我应该使用嵌套属性吗?
答案 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) %>