1

現在のコード

@current_site_name = 'SITENAME'
@current_site = Site.where(:name => @current_site_name)
@current_site_id = @current_site.id

基本的に、モデルのnameSiteは一意です。サイト名をパラメーターとして使用して行を選択しています。

私は戻ってきました:<ActiveRecord::Relation:0x59426bc1>

単純に要求できないことは理解してい@current_site.idますが、単一のアクティブレコードの ID を変数に入れる方法はありますか@current_site_id

繰り返しますが、アクティブなレコードは常に 1 つです。

4

3 に答える 3

3

ご覧のとおり、条件に一致する行が 1 つしかない場合でも、(行のセット)whereが返されます。行を次のように変更することで、必要な行に割り当てるActiveRecord::Relationことができます。@current_site

@current_site = Site.where(:name => @current_site_name).first
于 2012-04-10T16:33:22.430 に答える
0

うーん...これはかなり奇妙です。

Site.where(:name => @current_site_name).methods.include? :id #=> false

しかし

Site.where(:name => @current_site_name).instance_methods.include? :id #=> true

でも、

Site.where(:name => @current_site_name).instance_eval "id" #=> NameError

Site.where(:name => @current_site_name).methods.include? "self.id" #=> NoMethodError

とはいえ、あなたの場合、1つのレコードのみが返されると仮定した回避策は

Site.where(:name => @current_site_name).instance_eval('find_first').id

find_firstメソッドは、protected別のものを避けるために、その実行でスコープをジャンプする必要があるためですNoMethodError

于 2012-04-10T16:50:35.183 に答える
0

モデル用に作成されたRails の動的ファインダーを利用することもできます。

@current_site = Site.find_by_name(@current_site_name)

これは単一のレコードを返し (したがって を使用する必要はありませんfirst)、一部の人々の意見ではよりクリーンなコードと見なされる可能性があります。

于 2012-04-10T17:03:57.207 に答える