私は、すべてのページがイメージで、マルチアップロードによって読み込まれるオンラインマガジンリーダーを作成しました。いくつかの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
しかし、それはまったく動作せず、リンクの代わりにクラス全体をロードしようとしているようです。
一意性検証は次のとおりです。私はそれが私の主な関心事ではなかったので、私はここにそれを置くことが有用であるとは思わなかった。それは魅力のように働いた、私はちょっと嬉しかった、私が探していたものに近くあった – Jaeger
あなたはparamsを繰り返してハッキングする必要はありません - [fields_for](http://api.rubyonrails)を使ってください。 – max
DBインデックスは実際には非常に関連しています。これは上記のように '重複がある場合は奇妙な結果になります。 – max