2015-12-15 2 views
2

Обычай маршрутизации:Как использовать form_for с настраиваемым маршрутом?

resources :blog, controller: 'posts' 

Как переписать эту строку <%= simple_form_for(@post, blog_path) do |f| %>, чтобы избавиться от ошибки ниже?

TypeError in Posts#edit 
ActionView::Template::Error (no implicit conversion of Symbol into Integer) 

Я также попытался <%= simple_form_for(blog_path(@post)) do |f| %>, который избавляется от ошибки, но если я хочу, чтобы изменить форму входов опорожнять их сохраненные данные.

posts_controller

def new 
    @post = Post.new 
    respond_with(@post) 
    end 

    def edit 
    end 

    def create 
    @post = Post.new(post_params) 
    if current_user.admin 
     @post.save 
     respond_with(@post) 
    else 
     flash[:success] = 'Get the fuck out of here.' 
     redirect_to root_url 
    end 
    end 

ответ

4

Это может занять хэш опций, включая URL, так что-то вроде этого:

Edit: изменен blog_path к blogs_path. blog_path - это действие show, а не действие create и поэтому требует идентификатора (и, в любом случае, не является почтовым путем). Попробуйте это так.

<%= simple_form_for(@post, url: blogs_path) do |f| %> 
+0

Эй, Крус. Спасибо за вашу помощь. Проблема с вашим ответом, хотя, если я пытаюсь создать новое сообщение в блоге, я получаю сообщение об ошибке «Нет сопоставлений маршрутов {: action =>« show »,: controller =>« posts »} отсутствующих необходимых ключей: [: id]' Any другие идеи о том, как мы можем сделать form_for работы с настраиваемым маршрутом? Еще раз спасибо! –

+0

Попробуйте отредактировать. –

+0

@ AnthonyGalli.com - Вы когда-нибудь решали это? Работала ли моя работа, или это все еще проблема? –

0

Не знаю, если это применимо, но очень интересная особенность я нашел другой день был .becomes - где вы можете изменить «класс» вашего объекта так, что Rails обрабатывает его по-другому:

Это может быть использован вместе с идентификацией записи в пакете действий, чтобы, скажем, клиенту < компании сделать что-то подобное делают частичным: @client.becomes(Company), чтобы сделать этот экземпляр с помощью фирмы/компаний парциальных вместо клиентов/клиента.

Итак ...

Если у вас Blog модели, и хотели, чтобы каждый @post будет рассматриваться как таковые (опять же, я не знаю, если это ваша установка на всех), вы могли бы сделать следующие:

Я удалю, если не подходит; это очень пригодится для меня.


Update

Если вы хотите, чтобы ваше posts_path быть блог (IE url.com/blog/1), вы хотите посмотреть на использование опции path для генератора маршрутов:

#config/routes.rb 
resources :posts, path: "blog", as: :blog # -> url.com/blogs/2 
+0

Привет, Ричард снова за вашу помощь. У меня нет модели блога.У меня просто есть сообщения, но мне нравится, как блог выглядит лучше в URL-адресе. Вот что теперь, когда я использовал предложение Крус, я могу редактировать, но не создавать сейчас. Есть идеи? Например, если я просто положил '<% = simple_form_for (@post) do | f | %> 'Я получаю ошибку' undefined method 'posts_path''. Это связано с тем, что из-за изменения моих маршрутов это теперь 'blog_index_path' –

+0

Я просто прочитал это после редактирования моего выше ответа. Можете ли вы показать свой файл маршрутов? –

Смежные вопросы