0

貴重なリソースのstackoverflowから多くのことを学びました。私は多くの素晴らしい貢献をしてくれたことに非常に感謝しています。長生きするオープンソースとそれを現実のものにするもの!

ここにあるすべてのすばらしい情報については、ここで自分の問題に対する正しいアプローチを見つけることができませんでした。説明させてください。

RefineryCMS v。2.0.9を使用して、「ポートフォリオ」を表示するためにRailsアプリ内にエンジンを生成しました。'ポートフォリオ'has_many':exhibits'。以下のモデルのように、「:exhibit」belongs_to':portfolio'。

モデル属性:img_orginal-には、トンボの画像アップロード用のuidが含まれていることが意図されています。これは正常に機能します。画像アップロードuidはデータベースにコミットされ、意図したとおりにviews / portal/show.html.erbビューに呼び出すことができます。サイトがレスポンシブであることを目的としています。レスポンシブにするためには、オリジナルから生成されたサイズ変更された親指のスイートが必要です。これらは、:img_originalがアップロードされ、バックエンドフォームを介してコミットされるときに、Dragonflyによって生成される必要があります。これまでのところ、展示モデル内でDragonflyimage_accessorを使用してこれを実現することはできませんでした。作成しようとすると、フォローイン例外が発生します。

保護された属性を一括割り当てできません:img_original ActiveModel :: MassAssignmentSecurity :: Error in Refinery :: Portfolio :: Admin :: ExhibitsController#create

両方のデータベースが存在し、「exhibits」モデルの「:portfolio_id」外部キーを介して正しくリンクされています。すべてのモデル属性は、現在のレールのベストプラクティスに従ってホワイトリストに登録されています。

私は何が欠けていますか?コントローラーのメソッドは正しくないと思いますが、どうあるべきかわかりません。インスタンスでPageImageクラスを呼び出すように、またはDragonfly自体を呼び出すように、エンジンコントローラーを修正する必要がありますか?ルートを変更する必要がありますか?rb。誰かが私がコントローラーのcreateメソッドとupdateメソッドをどのように定義するかアドバイスしてもらえますか?メインの製油所アプリのpage_imagesコントローラーによって既に定義されているはずなので、それも必要ですか。

Dragonflyのドキュメントで提案されている方法で、image_accessorを使用して実験しました。これまでに採用されたアプローチのいくつかを次に示します。

すなわち。

image_accessor :img_original do
after_assign :crop_thumb     #method defined below
            #:resize_mobile,
            #:resize_tablet,
            #:resize_desktop
# OR
#  copy_to(:img_thumb) do
#    |a| a.thumb('100x100')
#    end
# OR different block syntax
#  copy_to(:img_thumb) do {|a| a.thumb('100x100')}
end

def crop_thumb
  @exhibit.img_thumb = @exhibit.img_original.process(:resize_and_crop,
                                                     :width => 100,
                                                     :height=> 100,
                                                     :x => :x_focus,
                                                     :y => :y_focus).encode(:jpg, '-quality 60').apply
end

#def resize_mobile,
   @exhibit.img_mobile = @exhibit.img_original.process(etc.
#end

#def resize_tablet,
   etc.

私はこれに非常に慣れていません、私はそれを達成するために私ができるすべてをこれまで研究し続けてきました。それでも私はこれに到達し、それをクラックすることはできません。私は誰かが提供するかもしれないどんな援助にも感謝します。ありがとうございました。

以下のコード例と環境情報。

環境; Ubuntu 12.10 RubyMine IDE Ruby1.9.3gemを処理するRVMRails3.2.9 SQLite開発データベースRefineryCMS(page_imagesおよびinquiriesプラグインを含む)Dragonfly 0.9.14

これらの移行で生成されたポートフォリオエンジン

 # This migration comes from refinery_portfolios (originally 1)
 class CreatePortfoliosPortfolios < ActiveRecord::Migration

 def up
 create_table :refinery_portfolios do |t|
  t.string :title
  t.integer :year
  t.text :description
  t.integer :publication_id
  t.integer :commentary_id
  t.integer :position
  t.timestamps
end
end

def down
if defined?(::Refinery::UserPlugin)
  ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-portfolios"})
end

if defined?(::Refinery::Page)
  ::Refinery::Page.delete_all({:link_url => "/portfolios/portfolios"})
end

drop_table :refinery_portfolios
end
end

# This migration comes from refinery_portfolios (originally 2)
class CreatePortfoliosExhibits < ActiveRecord::Migration

def up
create_table :refinery_portfolios_exhibits do |t|
  t.string :title
  t.integer :cat_num
  t.integer :year
  t.string :medium
  t.integer :width
  t.integer :height
  t.integer :img_original_id
  t.string :img_thumb
  t.string :img_mobile
  t.string :img_tablet
  t.string :img_desktop
  t.integer :x_focus
  t.integer :y_focus
  t.text :history
  t.integer :portfolio_id
  t.boolean :sold
  t.integer :position

  t.timestamps
  end

  end

def down
 if defined?(::Refinery::UserPlugin)
  ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-portfolios"})
end

if defined?(::Refinery::Page)
  ::Refinery::Page.delete_all({:link_url => "/portfolios/exhibits"})
end

drop_table :refinery_portfolios_exhibits

end

end

また、refinery_portfolios_exhibitsテーブルの列ヘッダーが変更されました

 Exhibits table column header changed via migration
 class FixColumnName < ActiveRecord::Migration
  def change
   rename_column :refinery_portfolios_exhibits, :img_original_id, :img_original_uid
   rename_column :refinery_portfolios_exhibits, :img_thumb, :img_thumb_uid
   rename_column :refinery_portfolios_exhibits, :img_mobile, :img_mobile_uid
   rename_column :refinery_portfolios_exhibits, :img_tablet, :img_tablet_uid
   rename_column :refinery_portfolios_exhibits, :img_desktop, :img_desktop_uid
  end
 end

ポートフォリオモデルには、「portfolio.rb」と呼ばれるポートフォリオメタデータが含まれています。has_manyexhibitsモジュールRefineryモジュールPortfoliosクラスPortfolio <Refinery :: Core :: BaseModel self.table_name ='refinery_portfolios'

  attr_accessible :title,
                  :year,
                  :description,
                  :publication_id,
                  :commentary_id,
                  :position

  acts_as_indexed :fields => [:title]

  validates :title, :presence => true, :uniqueness => true

  belongs_to :publication, :class_name => '::Refinery::Resource'
  belongs_to :commentary, :class_name => '::Refinery::Resource'

  # destroy all exhibits when a portfolio is destroyed
  has_many :exhibits, :dependent => :destroy

end
end
end

Exhibit Modelには、「exhibit.rb」と呼ばれる画像リンクと関連するメタデータが含まれています。ポートフォリオに属する

require 'dragonfly/rails/images'

module Refinery
module Portfolios
class Exhibit < Refinery::Core::BaseModel

attr_accessible   :title,
                  :cat_num,
                  :year,
                  :medium,
                  :width,
                  :height,
                  :img_original_uid,   #image upload uid from refinery_images table
                  :img_thumb_uid,      #commit resize uid here
                  :img_mobile_uid,     #here
                  :img_tablet_uid,     #here
                  :img_desktop_uid,    #and here
                  :x_focus,
                  :y_focus,
                  :history,
                  :portfolio_id,   #foreign key, associates exhbit with portfolio
                  :sold,
                  :position

  acts_as_indexed :fields => [:title, :medium, :year, :cat_num]

  validates :title, :presence => true, :uniqueness => true
  validates :year, :length => { :is => 4,
                                :message => "Four digit year format,(yyyy) eg. 2013"}
  validates :img_original_uid, :presence => true, :uniqueness => true                             
  validates :portfolio_id, :presence => true
  validates_associated :portfolio
  validates :x_focus, :presence => true
  validates :y_focus, :presence => true
  validates :sold, :inclusion => {:in => [true, false]}

  belongs_to :img_original, :class_name => '::Refinery::Image'
  belongs_to :portfolio, :class_name => 'Portfolio', :foreign_key => 'portfolio_id'
  end
  end
  end

コントローラ「admin/exhibit.rb」

 module Refinery
  module Portfolios
   module Admin
    class ExhibitsController < ::Refinery::AdminController
      before_filter :find_all_portfolios

      crudify :'refinery/portfolios/exhibit', :xhr_paging => true

      protected

      def find_all_portfolios
        @portfolios = Refinery::Portfolios::Portfolio.all
      end

    end
  end
 end
end

コントローラ'exhibit.rb'

 module Refinery
 module Portfolios
  class ExhibitsController < ::ApplicationController

   before_filter :find_all_exhibits
   before_filter :find_page

  def index
    #@exhibits = Exhibit.all(:include => :portfolio)

    # you can use meta fields from your model instead (e.g. browser_title)
    # by swapping @page for @exhibit in the line below:
    present(@exhibit)
  end

  def show
    @exhibit = Exhibit.find(params[:id])

    # you can use meta fields from your model instead (e.g. browser_title)
    # by swapping @page for @exhibit in the line below:
    present(@exhibit)
  end


  protected

  def find_all_exhibits
    @exhibits = Exhibit.order('position ASC')
  end

  def find_page
    @page = ::Refinery::Page.where(:link_url => "/exhibits").first
  end

   end
  end
 end
4

1 に答える 1

0

10 か月前に質問して以来、これについてはあまり気にしていないと思いますが、展示モデルで変更を試みましたか?

attr_accessible :img_original_uid

attr_accessible :img_original

エラーは img_original フィールドで発生しますが、img_original_uid へのアクセスを許可しています。トンボも初心者です...

于 2013-12-31T14:13:59.117 に答える