【问题标题】:How can I pass data from one scaffold to another?如何将数据从一个脚手架传递到另一个脚手架?
【发布时间】:2017-05-01 17:12:44
【问题描述】:

我目前正在创建一个可以阅读多个漫画的网站。结构如下(根据我为之工作的人的要求):首先,您拥有所有漫画标题(例如,火影忍者、海贼王、一拳等)。然后,当您单击其中一个漫画时,您将进入与该漫画相关的章节。然后你终于可以访问漫画的扫描了。

困扰我的是我使用了两种不同的脚手架(一个用于漫画,另一个用于章节),但我不知道如何告诉 Rails,当工作人员想要在漫画中添加章节时,该章节链接到哪个漫画。

我决定从漫画的标题 (mangas#show) 创建一个指向章节创建 (chapters#new) 的链接,并将漫画的 ID 传递给章节的创建 URL,如下所示:

routes.rb

get '/chapters/new/:manga_id' => 'chapters#new', as: :new_chapter

漫画#show

<%= link_to 'Add a new chapter', new_chapter_path(@manga.attributes['id']) %>

(由于我使用 FriendlyId,这是我能找到的唯一获取真实 ID 而不是 slug 的方法)

到目前为止,当我到达chapters#new 操作时,我的网址如下所示:http://localhost:3000/chapters/new/1,1 是与链接一起传输的漫画 ID。

然后,在控制器中,我将 id 隔离如下:

def create
    @chapter = Chapter.new(chapter_params)

    if @chapter.save
        @chapter.manga = request.original_url.split('/').last.to_i
      end
      redirect_to @chapter, notice: 'Chapter was successfully created.'
    else
      render :new
    end
  end

但是,在提交表单时,我收到以下错误:

Manga(#106972960) expected, got Fixnum(#10269260)

我相信这是因为我在控制器等待整个对象时给了他一个数字,但我认为这已经足够了,现在我没有主意了。

有人有想法吗?

【问题讨论】:

    标签: ruby-on-rails scaffold


    【解决方案1】:

    我建议将您的网站嵌套放置,这样您就可以对所有重要的事情进行 CRUD 操作。例如,您将有一个漫画模型、章节模型和扫描模型。

    漫画模型存储单个漫画,并允许您创建、更新、删除等每个漫画, 章节模型存储漫画模型的各个章节。 扫描模型存储章节的单个扫描。

    您不必断开头部构建链接。 Rails 为您做所有事情。您只需在您的 routes.rb 中指定嵌套的资源(控制器)即可。

      resources :Manga do
        resources :Chapter do
          resources Scans
        end
      end
    

    这定义了对所有资源进行 CRUD 操作所需的所有路由,并且链接自动组织如下:

    yourdomain.com/manga/manga_number/chapter/chapter_number/scans/scan_number
    

    当您创建新漫画时:

    yourdomain.com/manga/new
    

    当您在漫画中创建新章节时:

    yourdomain.com/manga/manga_number/chapter/new
    

    当您在章节中创建新扫描时:

    yourdomain.com/manga/manga_number/chapter/chapter_number/scans/new
    

    这一切都归功于将资源嵌套在路由器中。

    【讨论】:

    • 您好,很抱歉这么晚才回答,但我有几天无法处理代码,我只有一个问题:一切进展顺利(需要一两次调整),但是现在我被创建表单阻止了:它不接受“章节”或“@章节”作为参数,所以我尝试了一些东西,直到“new_manga_chapters_path”让表单出现。但是,我仍然有保存章节表格的问题.. 我应该为form_for 输入什么参数?
    • 当您创建嵌套的新条目时,您必须按照您通过“new_manga_chapters_path”找到的正确路径来处理它们。在这种情况下,您需要在章节的控制器中定义一个实例变量,并在您的表单中引用该实例变量。 Rails 负责其余的工作。我稍后会更新我的答案,因为您还必须更新模型,以便在创建章节时将其存储为漫画章节和章节扫描。
    猜你喜欢
    • 2020-03-03
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多