【发布时间】:2016-12-18 17:45:35
【问题描述】:
我正在尝试创建一个 Rails 应用程序,人们可以在该应用程序上通过章节阅读漫画。为此,我创建了 3 个脚手架:一个用于漫画本身,另一个用于章节,最后一个用于页面。我嵌套了资源,如下所示:
resources :mangas do
resources :chapters do
resources :pejis
end
end
但是,我想创建一个系统,每次有人向同一漫画添加新章节时,自动递增 chapter_number(章节类中的一列)。
所以我创建了一个函数,another_one,来计算有多少章节具有相同的 manga_id(从女巫漫画中说明章节来自的列(漫画 has_many :chapters,章节 belongs_to :manga)。
之后,它只是将找到的结果加 1,然后将结果保存在 chapter_number 中。
但是,我有一个问题:由于 manga_id 可以是动态的,无论我选择将一些章节添加到漫画还是其他,我需要在我的函数中指定它,如下所示:
chapter.rb
def another_one
self.class.where(:manga_id => @manga).count + 1
end
使用此参数,即使它没有返回任何错误,它也无法正常工作。但是,如果我添加(即)4 而不是 @manga,它将完美运行。
我的问题是:有没有办法动态传递这种变量,因为find(params[:id] 在模型中不起作用?如果没有,我怎样才能让它以另一种方式工作?
这是我的控制器,以防万一
def create
@manga = Manga.find(params[:manga_id])
@chapter = Chapter.new(chapter_params)
@chapter.manga = @manga
@chapter.chapter_number = @chapter.plus_un
if @chapter.save
(params[:images] || []).each_with_index do |image, index|
@chapter.pejis.create(image: image, scan_number: index + 1)
end
redirect_to manga_chapter_path(@manga, @chapter), notice: 'Chapter was successfully created.'
else
render :new
end
end
【问题讨论】:
-
你想在哪里调用 add_another?
-
你想在哪里调用 self.class.where(:manga_id => @manga.id).count + 1 ?
-
哎呀,忘了说,我在章节模型里面设置了这个功能
标签: ruby-on-rails parameters model