使用simple_form和浅嵌套资源的Rails 4路由

时间:2014-12-10 00:30:39

标签: ruby-on-rails ruby-on-rails-4 simple-form nested-resources

  resources :accounts, shallow: true do
    resources :textnotes 
  end

给我

   account_textnotes GET    /accounts/:account_id/textnotes(.:format)     textnotes#index
                     POST   /accounts/:account_id/textnotes(.:format)     textnotes#create
new_account_textnote GET    /accounts/:account_id/textnotes/new(.:format) textnotes#new
       edit_textnote GET    /textnotes/:id/edit(.:format)                 textnotes#edit
            textnote GET    /textnotes/:id(.:format)                      textnotes#show
                     PATCH  /textnotes/:id(.:format)                      textnotes#update
                     PUT    /textnotes/:id(.:format)                      textnotes#update

当我尝试创建新笔记时

http://0.0.0.0:3000/accounts/4/textnotes/new
<%= simple_form_for(@textnote) do |f| %>

我收到以下错误:

NameError in Textnotes#new
Showing /Users/xyz/rails_projects/crm/app/views/textnotes/_form.html.erb where line #1 raised:

undefined method `textnotes_path' for #<#<Class:0x007f8204f37360>:0x007f8204be4fa0>

2 个答案:

答案 0 :(得分:0)

您是否需要向url添加simple_form_for参数,指定accounts_textnotes_path

使用浅嵌套设置,您将发布到父资源的索引路径(我相信上面显示的路由输出显示)。

如果这不起作用,您可以随时尝试指定字符串路径或操作。

(与往常一样,http://edgeguides.rubyonrails.org/form_helpers.htmlhttp://guides.rubyonrails.org/routing.html可能有所帮助。)

答案 1 :(得分:0)

你很亲密。您必须像这样指定父帐户:

<%= simple_form_for([@account, @textnote]) do |f| %>