0

假设我有两个模型model1model2,并且该model2belongs_to model1(相反,model1有很多model2)。假设现在我想model2model1/1页面视图创建一个 , (显示model1id 为 1 的页面)。这是我所做的:

<%= form_for(@model2, remote: true) do |f| %>
      <%= f.text_field :title %>
      <%= f.submit "POST" %>
<% end %>

(@model2 在model1控制器 show 方法中实例化)。这是最佳做法吗?我应该使用嵌套属性吗?

4

2 回答 2

1

我不知道最佳实践,但我认为在其资源范围内尝试并且仅尝试 CRUD 模型是最有意义的。也就是说,我更喜欢accepts_nested_attributes_for通过提交到 的表单来使用和创建它@model1,但同样,这只是偏好 - 任何一个都可以。

于 2013-11-10T00:24:58.967 回答
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) %>

结帐:嵌套资源 rails api

于 2013-11-10T16:42:04.000 回答