2013-12-12 2 views
0

Я новичок в Ruby on Rails и выкалываю Stackoverflow и Интернет в меру своих возможностей, и я все еще в тупике.Rails4 Simple_form вложенное поле формы, не отображающее

В моей настройке рейтинг принадлежит _ к Продукту и has_many Комментарии. Я использую простую форму и пытаюсь использовать вложенные поля для добавления RatingComment через форму рейтинга. Интересно, что при использовании единственной формы: rating_comment отображается поле. Но, как и ожидалось, я получаю ошибку при ошибке при попытке сохранить. Когда я использую множественное число: rating_comments, поле исчезает. Это похоже на это SO posting, но добавление @ rating.rating_comments.build к новому действию по-прежнему не работает для меня. Я попытался перезапустить сервер много раз и даже сбросить базу данных безрезультатно. Буду признателен за любую помощь, поскольку я боролся с этой проблемой в течение последних нескольких дней.

Примечание: Я также извлек из приведенных ниже фрагментов, что, по моему мнению, не имеет отношения к коду. Если мне нужно показать больше информации, пожалуйста, дайте мне знать. Заранее спасибо!

routes.rb

resources :ratings, only: [:new, :create, :edit, :update, :destroy] do 
    resources :rating_comments, shallow: true 
end 

rating.rb

class Rating < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :user 

    has_many :rating_comments, foreign_key: "rating_id", dependent: :destroy  
    accepts_nested_attributes_for :rating_comments, reject_if: :all_blank 
end 

rating_comment.rb

class RatingComment < ActiveRecord::Base 
    belongs_to :rating 
    validates :rating_id, presence: true 
end 

ratings_controller.rb

class RatingsController < ApplicationController 
    before_action :signed_in_user, only: [:create, :new, :show] 

    def new 
    @product = Product.find(params[:id]) 
    @rating = @product.ratings.new 
    @rating.rating_comments.build 
    end 

    def create 
    @product = Product.find(params[:product_id]) 
    @rating = @product.ratings.build(rating_params) 
    @rating.user_id = current_user.id 
    ... 

    private 
    def rating_params 
     params.require(:rating).permit(:user_id, :product_id, :rating, rating_comments_attributes: [:rating_id, :content]) 
    end 
end 

рейтинги/_new_rating_form.html.erb

<%= simple_form_for([@product, @rating], html: { class: 'form-horizontal' }) do |f| %> 
    <%= f.error_notification %> 
    <%= f.input :rating, collection: 1..10, as: :radio_buttons, 
      item_wrapper_class: 'inline', checked: 5 %> 
    <%= f.simple_fields_for :rating_comments do |rc| %> 
    <fieldset> 
     <%= rc.input :content, label: "Comments" %> 
    </fieldset> 
    <% end %> 
    <%= f.error :base %> 
    <%= f.button :submit, "Submit" %> 
<% end %> 

ответ

0

Очень стесняюсь признать, что получается, что у меня было представление написано в неправильном действии. Как только я положил его в new.html, он наконец-то сработал.

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