【问题标题】:saving a model with multiple associations保存具有多个关联的模型
【发布时间】:2014-07-16 00:34:22
【问题描述】:

我有一个名为atreas 的模型,它存储有关剧院的信息。

我根据用户搜索的邮政编码列出了剧院。然后用户可以点击一个单独的剧院并显示它的评论。如果他们已登录,他们可以添加评论。

所以我的模型是:

剧院有_许多评论

用户有很多评论

评论属于用户并拥有一个影院

提交新评论时,我正在这样做(@theater_id 作为参数通过添加评论提交按钮传递):

def create
      @user_id = current_user
      @review = Review.create(review_params.merge(:user_id => @user_id,:theater_id => @theater_id))
      if @review.save
        redirect_to @review
      else 
        render 'edit'
      end
   end

我觉得由于我的关联,有一种更简单、更正确的方法来做到这一点。就像 rails 应该自动输入我当前的用户 id 和剧院 id...对吧?

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    嵌套资源

    我不知道您的routes 是如何设置的,但这通常在nested resources 的范围内,您的reviews 对象将在theatre 对象下创建:

    #config/routes.rb
    resources :theatres do
       resources :reviews #-> domain.com/theatres/1/reviews/new
    end
    

    当您像这样使用路由时,它会在您的 controller 中设置一个额外的参数,称为 theatre_id,您可以使用它来填充您的新 Review 对象:

    #app/controllers/reviews_controller.rb
    Class ReviewsController < ApplicationController
       def create
           @review = Review.new(review_params)
           @review.save 
       end
    
       private
    
       def review_params
            params.require(:review).permit(:your, :params).merge(theatre_id: params[:theatre_id]
       end
    end
    

    --

    或者,您可以设置新的ActiveRecord 对象的theatre 对象:

    #app/controllers/reviews_controller.rb
    Class ReviewsController < ApplicationController
       def create
           @theatre = Theatre.find params[:theatre_id]
    
           @review = Review.new(review_params)
           @review.theatre = @theatre
           @review.save
       end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-10
      • 2019-09-15
      • 2011-03-05
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多