在查询中将id作为$ 1而不是1

时间:2015-02-18 07:24:14

标签: ruby ruby-on-rails-4

您好我遇到问题请帮帮我

 def messaging
  user = User.friendly.find(params[:id])

  @owner = user.owner
  authorize @owner

  if params[:renter_id].to_i == 0
    @renter = User.friendly.find(params[:renter_id]).renter
  else
    @renter = Renter.find(params[:renter_id])
  end     

   @messages = @owner.messages.where(renter_id: @renter.id).order(created_at: :desc)
   @last_property = Property.find(@messages.first.property_id)
   mark_read(@renter.id)
 end

这里的@messages我正在接收来自后端的查询

SELECT "messages".* FROM "messages"  WHERE "messages"."owner_id" = $1 AND "messages"."renter_id" = 2  ORDER BY "messages"."created_at" DESC  [["owner_id", 1]]

这里owner_id取1美元而不是1,为什么?

另外请向我解释授权。

1 个答案:

答案 0 :(得分:1)

它是PostgreSQL驱动程序中的编号占位符,它正常工作

实施例: PostgreSQL驱动程序希望看到编号的占位符($ 1,$ 2,...)不是问号,你需要为准备好的语句命名:

  

的ActiveRecord :: Base.connection.raw_connection.prepare(' some_name&#39 ;,   " DELETE FROM my_table WHERE id = $ 1")