0

次のように関連する 3 つのオブジェクトがあります。

class Site < ActiveRecord::Base
    belongs_to :program
end

class Program < ActiveRecord::Base
    belongs_to :user
    has_many :sites
end

class User < ActiveRecord::Base
    has_many :programs
end

私のSites index見解では、すべてのサイトをループするときに、表示したいボタンEditDestroyボタンがありますがcurrent_user、サイトを所有している場合に限ります。

- if current_user == site.program.user || current_user.try(:admin?)
  = icon_link_to "edit", 'Edit', edit_program_site_path(site.program, site), :class => "btn btn-primary"
  = icon_link_to "trash", "Delete", site, confirm: 'Are you sure?', method: :delete, class: 'btn btn-danger'

プログラム オブジェクトとユーザー オブジェクトが nil であるため、このコードは失敗します。

私のコントローラーでは、次のようなものが必要であることを知っています。

@sites = Site.includes(:programs).all

これで へのアクセスの問題は解決しsite.programますが、user.

現在のスキーマが正しくないと見なされる場合、モデルの変更は受け入れられます。

ありがとう。

4

1 に答える 1

1

使用する、

Site.joins(:program).where('programs.user_id=?', current_user.id).includes(:programs).all
于 2013-03-03T14:01:20.397 に答える