来自不同控制器的Rails attr_accessor

时间:2016-04-20 08:21:43

标签: ruby-on-rails ruby ruby-on-rails-3

以下是我的home_controller:

class HomeController < ApplicationController
  def index
   @products = Product.public_active.order('random()').limit(6).includes(:product_attachments).includes(:product_reviews)
  end
end

和我的product.rb模型

class Product < ActiveRecord::Base
  has_many :product_attachments, dependent: :destroy
  accepts_nested_attributes_for :product_attachments, allow_destroy: true
  attr_accessor :product_display
  attr_accessor :product_overview_url

  def set_extra_attributes
    self.product_overview_url = self.product_attachments[0].attachment.medium.url
  end

  def set_cover_photo
    self.product_display = self.product_attachments.find(self.cover_id).attachment.url
    end
  end

在我的家庭观看次数app/views/home/_product_section.html.erb中,我无法访问product_display

<div class="row">
  <% @products.each do |product| %>
    <div class="img-holder">
      <a href="<%= product_path product %>">
        <img src="<%= product.product_display %>" alt="<%= product.name %>" style="width: 100%;">
      </a>
    </div>
  <% end %>
</div>

但我可以从我的self.product_overview_url页面模板访问app/view/products/index.html.erb。我需要建立关系,以便home_controller可以访问product.rb模型吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在set_extra_attributes和set_cover_photo方法中,不需要self,因为这些是引用实例属性的实例方法。

def set_extra_attributes
  product_overview_url = product_attachments[0].attachment.medium.url
end

def set_cover_photo
  product_display = product_attachments.find(cover_id).attachment.url
end

您需要确保将product_display设置为某个内容。