【问题标题】:nested models best practice - rails嵌套模型最佳实践 - rails
【发布时间】:2013-11-09 23:03:39
【问题描述】:

假设我有两个模型model1model2,而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 提交表单来创建它,但同样,这只是偏好 - 两者都可以。

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-02
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多