2016-10-31 1 views
0

У меня есть 2 модели, блоги и сообщенияПростая форма для параметров

resources :blogs do 
    resources :posts 
    end 

Так же у меня есть связь. В одном блоге может быть много сообщений. Поэтому я ставлю ссылку на новую должность в индексе блога:

= link_to 'New Post', new_blog_post_path(@blog) 

А потом перенаправляет вас на новый пост, который делает форму, как это:

= simple_form_for(@post) do |f| 
    = f.error_notification 

    .form-inputs 
    = f.input :title 
    = f.input :content 

    .form-actions 
    = f.button :submit 

И я получаю ошибка:

undefined method `posts_path'

Я думаю, что простая форма требует blog_id, но я не мог ее найти. Я попытался поместить @ blog.id в простую форму, но в любом случае у меня есть ошибка (id для класса nil) Как я могу решить свою проблему?

+0

Нет такой вещи, как 'posts_path'. Введите 'rake routes', и вы увидите, что маршрут, который вы ищете, вероятно, является' blog_posts_path'. Этот маршрут направит вас на индексную страницу для сообщений. – Mark

+0

Да, вопрос в том, как я могу отправить правильный маршрут из моей формы? –

ответ

1

Я никогда не использовал simple_form_for, но мне кажется, что у вашего ресурса есть назначенная ассоциация. Таким образом, вы должны включить его в определении формы:

= simple_form_for([@blog, @post]) do |f| 
= f.error_notification 

.form-inputs 
    = f.input :title 
    = f.input :content 

.form-actions 
    = f.button :submit 

И, очевидно, вы должны будете иметь @blog доступной в действии контроллера.

Ссылка на form_for документов: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

EDIT:

Не знаю, где posts_path приходит из вашего кода, но очевидно, что маршрут не существует, так как все post пути зависят от blog с ,

Есть ли где-нибудь, где вы ссылаетесь на post_path в своем коде?

+0

та же ошибка: undefined method 'posts_path ' –

+0

См. Редактирование. Форма будет генерировать 'posts_path' в качестве URL-адреса для формы, вы пытались помещать [@blog, @post] в' simple_form_for'? Это должно генерировать правильный маршрут, что-то вроде 'blog /: blog_id/posts' –

+0

да, вы правы, но я не знаю, как правильно написать форму. –