0

独自のSQLを作成する場合に最もよく説明される、何らかの関係を持つモデルがあります。簡単にするために、私は次のようなものを書きます(たとえば、MyModel.rbで):

has_many :platform_spots, :finder_sql => "SELECT * FROM platform_spots WHERE id=#{id}"

モデルの説明で。

Railsコンソールを実行して、プルしようとすると

MyModel.find(:first)

私は得る

NameError: undefined local variable or method `id' for #<Class:0x000001039e4b80>

一重引用符を使用する必要があるため、次のように変更します。

has_many :platform_spots, :finder_sql => 'SELECT * FROM platform_spots WHERE id=#{id}'

今、コンソールで

ecs = MyModel.find(:first)
ecs.platform_spots

エラーが発生します

  PlatformSpot Load (0.2ms)  SELECT * FROM platform_spots WHERE id=#{id}
Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1: SELECT * FROM platform_spots WHERE id=#{id}
ActiveRecord::StatementInvalid: Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1: SELECT * FROM platform_spots WHERE id=#{id}
4

2 に答える 2

1

次のように書き直してみてください。

has_many :platform_spots, :class_name => "PlatformSpot",
            :finder_sql => proc {"select * from platform_spots where id = #{id}"}
于 2012-09-21T15:56:31.017 に答える
1

procどうやら、 github issue: https://github.com/rails/rails/issues/415およびhttps://stackoverflow.com/a/10620468/429850の他の SO 回答に示されているように、Rails 3.1が必要です。およびhttps://stackoverflow.com/a/5465800/429850

于 2012-09-21T15:53:06.660 に答える