1

モデレートを待つために特定のモデルが作成されたときに送信されるモデレーション テーブルがあります。

適度な.rb

class Moderate < ActiveRecord::Base
  attr_accessible :moderatable_id, :moderatable_type, :event, :data
  belongs_to :moderatable, polymorphic: true
  belongs_to :user

  scope :need_approval, where("approved IS NULL")
  mount_uploader :moderated_image, ModerationUploader

  def self.send_to_moderation(klass, event, params, id = nil)
    Moderate.create(
      moderatable_id: id,
      moderatable_type: klass,
      event: event,
      data: params.to_s
    )
  end

  ...

end

player.rb

class Player < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :handle, :game_id, :sc_race, :lane, :birthday, 
                  :photo, :team_division_id, :country_id, :keyboard, :mouse, :mousepad, :headset, :short_handle, 
                  :videocard, :bio, :monitor, :processor, :facebook, :twitter, :user_id, :stream_attributes

  ...

  mount_uploader :photo, PlayerUploader

end

「作成」アクションの例

def create
  @player = Player.new(params[:player])
  @player.user = current_user
  if @player.save
    Moderate.send_to_moderation("Player", "create", mod_params.to_json)
    redirect_to players_url, notice: "Player successfully created!"
  else 
    render action: "new"
  end
end

パラメーター

Parameters: {"utf8"=>"✓", 
             "authenticity_token"=>"er0VIcRfywxjROf634bhCEzn1b/GbAOZqnTpFFC9MAk=", 
             "player"=>
               {"handle"=>"angel_from_mexico", 
               "photo"=>
                 #<
                 ActionDispatch::Http::UploadedFile:0x00000103f58b70     
                 @original_filename="pulga!.jpg", 
                 @content_type="image/jpeg", 
                 @headers="Content-Disposition: form-data; 
                   name=\"player[photo]\"; 
                   filename=\"pulga!.jpg\"\r\nContent-Type: image/jpeg\r\n", 
                 @tempfile=#<Tempfile:/var/folders/GP/GPFCwZ6wFS0gEUkdN0ek1E+++TI/-Tmp-/RackMultipart20131014-78956-106x9m0>
                 >, 
               "first_name"=>"pulga", 
               "last_name"=>"nam", 
               "lane"=>"", 
               "sc_race"=>"", 
               "birthday(2i)"=>"2", 
               "birthday(3i)"=>"28", 
               "birthday(1i)"=>"2005", 
               "team_division_id"=>"", 
               "country_id"=>"122",
              "stream_attributes"=>{"name"=>""}, 
              "bio"=>"멍, 멍!", 
              "monitor"=>"acer", 
              "mouse"=>"acer", 
              "processor"=>"rad one", 
              "headset"=>"rad ones", 
              "mousepad"=>"default", 
              "keyboard"=>"garbage", 
              "videocard"=>"good one", 
              "facebook"=>"", 
              "twitter"=>""}}

質問:

プレーヤーを作成または編集すると、アクションとすべてのデータを含む新しいモデレーションが作成されますが、その時点 (モデレーションの作成中) に画像をプレーヤー/プレーヤー アップローダーにアップロードするのではなく、画像がモデレーションを指すようにしたいそしてモデレーションアップローダー。これどうやってするの?

4

1 に答える 1

2

あなたの場合、その操作をファクトリ サービス オブジェクトにラップして、次の 3 つのことを行います。

  • プレーヤー パラメータから画像を抽出する
  • プレーヤーを保存します(画像の有無にかかわらず、ここで必要かどうかわかりませんでした)
  • モデレートを指定画像で保存

ファクトリ クラスの詳細:

http://www.devinterface.com/blog/en/2010/06/design-patterns-in-ruby-abstract-factory/

于 2013-10-14T13:12:30.497 に答える