2017-01-16 2 views
0

私は、すべてのページがイメージで、マルチアップロードによって読み込まれるオンラインマガジンリーダーを作成しました。いくつかのUXの理由から、新しいページがアップロードされるたびにインクリメントする機能を追加した後、IDの代わりにURLにページ番号が表示されるシステムを設定しました。マルチアップロードの最初の子画像にリンクするにはどうすればいいですか?

http://localhost:3000/magazines/magazine-4/pages/1 

ここで、1はIDの代わりにこの増分された番号です。私はいつもここでは、このページ番号1

を取得するために進むべきか知っていただきたいと思い

はあなたに私が進む方法のアイデアを得るために、私のファイルの一部です:

magazine_controller.rb

def create 
    @magazine = Magazine.new(magazine_params) 

    if @magazine.save 
     (params[:images] || []).each_with_index do |image, index| 
     //Increments and saves the current page number 
     @magazine.pages.create(image: image, page_number: index + 1) 
     end 
     redirect_to @magazine, notice: 'Magazine créé' 
    else 
     render :new 
    end 
    end 

(Iは、IDとしてページ番号を設定)pages_controller.rb

private 

    def set_page 
    @magazine = Magazine.find_by(slug: params[:magazine_id]) 
    @page = @magazine.pages.find_by(page_number: params[:id]) 
    end 

    def page_params 
    params.require(:page).permit(:titre, :apercu, :page_number) 
    end 

ビュー/ _form.html.erb

<div class="field"> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    </div> 

    <div class="field"> 
    <label for="images[]">Multi Upload</label> 
    <%= file_field_tag 'images[]', type: :file, multiple: true %> 
    </div> 

のconfig/routes.rbを

resources :magazines do 
    resources :pages 
    end 

私は本当に私はあなたを示さなければならない他に何かわかりません。私はこのようなものを作成しようとしました

def first_page 
    self.class.where('page_number = 1', page_number) 
    end 

しかし、それはまったく動作せず、リンクの代わりにクラス全体をロードしようとしているようです。

答えて

1

あなたは代わりに雑誌のインスタンスでpages関連付けを使用する必要があります。もちろん

def first_page 
    self.pages.find_by(page_number: 1) 
end 

これは、ページ番号は雑誌ごとに一意であることを確認する必要があることを意味します:

class Page 
    validates_uniqueness_of :page_number, scope: :magazine_id 
end 

そして、あなたまたmake sure there is a db index

add_index :pages, [:page_number, :magazine_id], unique: true 
+0

一意性検証は次のとおりです。私はそれが私の主な関心事ではなかったので、私はここにそれを置くことが有用であるとは思わなかった。それは魅力のように働いた、私はちょっと嬉しかった、私が探していたものに近くあった – Jaeger

+0

あなたはparamsを繰り返してハッキングする必要はありません - [fields_for](http://api.rubyonrails)を使ってください。 – max

+0

DBインデックスは実際には非常に関連しています。これは上記のように '重複がある場合は奇妙な結果になります。 – max

関連する問題