我创建了一个在线杂志阅读器,其中每个页面都是一个图像,通过多重上传加载。出于某些UX原因,我添加了一个函数,每次上传新页面时都会递增,然后我设置一个系统,其中页码显示在URL而不是ID中,它提供以下内容:
http://localhost:3000/magazines/magazine-4/pages/1
其中1是递增的数字而不是ID。
我想知道如何继续获得这个第一页
以下是我的一些文件,可以让您了解我的进展情况:
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
pages_controller.rb(我将页码设置为ID)
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>
配置/ routes.rb中
resources :magazines do
resources :pages
end
我真的不知道我还应该告诉你什么。我试图创造这样的东西
def first_page
self.class.where('page_number = 1', page_number)
end
但它根本不起作用,似乎试图加载整个班级而不是链接。
有什么想法吗?
答案 0 :(得分: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