【问题标题】:Custom rails routing with has_many not working with form_for使用 has_many 的自定义导轨路由不适用于 form_for
【发布时间】:2016-01-04 08:16:46
【问题描述】:

尝试使用 has_many 为 Rails 制作自定义路线

这是我的“动漫”模型

has_many :anime_categories, dependent: :destroy

这是我做的路线

 match 'animes/:id/categories/new' => 'anime_categories#new', :via => :get

问题是当我访问 /animes/animename/categories/new 时,我得到一个从 form_for 引发的无方法错误:

NoMethodError in AnimeCategories#new
Showing     

app/views/anime_categories/new.html.erb where line #11 raised:

undefined method `anime_categories_path' for #<#    <Class:0x007fb643147d40>:0x007fb6431365b8>

这里是第 11 行

 <%= form_for(@anime_category) do |f| %>

AnimeCategory 新方法:

class AnimeCategoriesController < ApplicationController
 def new

@anime = Anime.friendly.find(params[:id])
@anime_category = Anime.friendly.find(@anime.id).anime_categories.new

end 

看不出究竟是什么导致了问题。我在动漫类别控制器中有“新”方法,所以我认为这是一个路由问题。

我想保持原来的 url 格式。我该怎么做?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routes


    【解决方案1】:

    您没有在 form_for 中提到方法,因此在您的情况下,它默认将其作为 post 方法。而你定义的路由是 :get 方法。

    在 form_for 上,您应该指定创建方法路径而不是发布方法路径。

    我不确定你的用例,但如果你想重定向到新的

    <%= form_for(@anime_category, method: :get) do |f| %>
    

    【讨论】:

    • 我一直在使用资源进行路线。对于表单我虽然默认是“新”方法和“创建”方法的一个帖子,因为这个我也有路由match 'animes/:id/categories' =&gt; 'anime_categories#create', :via =&gt; :post。如果资源 :anime_categories 不是默认设置,为什么会有该设置?并且添加的 get 说明符不起作用。仍然是完全相同的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2012-11-12
    相关资源
    最近更新 更多