1

私は2つのモデルを持っています(本と画像)

class Book < ActiveRecord::Base

  has_many :images

  accepts_nested_attributes_for :images

end 




class Image < ActiveRecord::Base

    belongs_to :book

    has_attached_file :data, :path => ":rails_root/public/system/datas/:book_id/:style/:basename.:extension",
                      :url => "/system/datas/:book_id/:style/:basename.:extension",


    :styles => {
      :thumb => ["150x172#",:jpg],
      :large => ["100%", :jpg]
    }

  validates_attachment_presence :data
    validates_attachment_content_type :data,
    :content_type => ['image/jpeg', 'image/pjpeg',
                    'image/jpg', 'image/png', 'image/tiff', 'image/gif'], :message => "has to be in a proper format"



end

ユーザーが新しい本を作成して画像をアップロードすると、特定のページにリダイレクトされるようにアプリケーションを変更したいと思います。それ以外の場合は、[表示]ページにリダイレクトされます

BookControllerの「create」アクションを次のように変更しました。

def create
    @book = Book.new(params[:book])


    if @book.save

      flash[:notice] = 'Book was successfully created'

      if params[:book][:image][:data].blank?  # === this line is giving me errors
        redirect_to @specific_page
      else  
         redirect_to show_book_path(@book.id)
      end

    else
      render :action => 'new'
    end

  end

1つまたは複数の画像がアップロードされている場合、ユーザーは別のページに移動する必要があることをテストしたい

次のif条件が誤っています。

if params[:book][:image][:data].blank?  # === this line is giving me errors

新しい本に画像が添付されているかどうかを確認する方法を誰かに教えてもらえれば幸いです。

書籍に関連するすべての画像ではなく、新しくアップロードされた画像のみを確認したいことに注意してください。

ありがとう

4

2 に答える 2

1

RubyのFileTestモジュールを使用できます。exists?指定されたファイルが存在する場合はtrueを返し、存在しない場合はfalseを返すメソッドがあります。

こちらのAPIドキュメントをご覧ください

于 2012-05-01T12:34:14.873 に答える
1

まず第一に、私はあなたのビューファイルについてよくわかりません。ただし、ユーザーが1つの画像を選択/アップロードしていない場合、params [:book] [:image]はnilになり、「if params [:book] [:image] [:data] .blank?」行はエラーを出します。

本のインスタンスに関連付けられている「画像」インスタンスを確認してみてください

if @book.images.any?
  redirect_to @specific_page
于 2012-05-01T12:34:30.837 に答える