2013-06-06 2 views
0

Я создаю форму для добавления предложений в предложения. Однако, хотя я могу успешно отправить форму, и rails возвращает флеш-сообщение, что предложение было отправлено успешно, значение для сообщения о предположении равно nil.Rails форма с вложенным ресурсом генерирует нулевой вывод

Я рассмотрел различные другие сообщения о формах с вложенными ресурсами, но ничто не помогло мне разрешить проблему.

Это то, что я делаю:

1. Перейдите на локальный: 3000/suggestion_boxes/1/предложения/новые

2. Форма приложения/мнения/предложения/new.html отображается .haml:

%header 
    %h1.title 
    = @suggestion_box.name + " Suggestion Box" 
.main 
    = form_for ([@suggestion_box, @suggestion_box.suggestions.build]) do |f| 
    - if @suggestion.errors.any? 
     #error_explanation 
     %ul 
      - @suggestion.errors.messages.values.each do |msg| 
      = msg.to_sentence 
    .field 
     %br/ 
     = f.text_area :suggestion_message, type:"text", placeholder:"Drop a note in our suggestion box...", :rows => 6, :cols => 30 
    .actions 
     = f.submit "Continue" 

3. Я введите текст в поле: suggestion_message и нажмите кнопку. Затем отображается приложение/просмотров/suggestion_boxes/show.html.haml:

%header 
    %h1.title 
    = @suggestion_box.name + " Suggestion Box" 
%p#notice= notice 
%p 
    = link_to "Post a new suggestion", new_suggestion_box_suggestion_path(@suggestion_box) 
%table 
    %tr 
    %th Message 
    - @suggestions.each do |suggestion| 
     %tr 
     %td 
      = suggestion.suggestion_message 

Здесь, однако, в то время как отображается флэш-сообщение о том, что предложение было успешно представлено в таблицах suggestion_message пустым.

Это то, что я получаю, когда я запрос к базе данных для предложений по этому ящик для предложений:

Suggestion Load (1.1ms) SELECT "suggestions".* FROM "suggestions" WHERE 
"suggestions"."suggestion_box_id" = 1 => [#<Suggestion id: 1, suggestion_message: nil, created_at: "2013-06-04 15:49:58", updated_at: "2013-06-04 15:49:58", anonymous_suggestion: nil, member_id: nil, suggestion_box_id: 1>, 

#]

Любые идеи, почему сообщение предложение равно нулю, даже если он появляется его сохраняется?

Большое спасибо за помощь!

Фрагменты из файлов, которые могут потребоваться для ответа на этот вопрос. Я включены только то, что я думал, что было бы соответствующие части

SuggestionBox Модель:

class SuggestionBox < ActiveRecord::Base 
    attr_accessible :name , :suggestions_attributes 
    belongs_to :organization 
    has_many :suggestions, :dependent => :destroy 
    accepts_nested_attributes_for :suggestions 
end 

Предложение Модель:

class Suggestion < ActiveRecord::Base 
    attr_accessible :suggestion_message, :anonymous_suggestion 
    belongs_to :suggestion_box 
end 

routes.rb

SuggestionBoxApp::Application.routes.draw do 
    resources :invites, :organizations, :users, :sessions, :password_resets 

    resources :suggestion_boxes do 
    resources :suggestions 
    end 
end 

Предложения Контроллер

class SuggestionsController < ApplicationController 

    def new 
    @suggestion_box = SuggestionBox.find(params[:suggestion_box_id]) 
    @suggestion = @suggestion_box.suggestions.build 

    flash[:error] = "Sorry, no suggestion box found with the id #{:id}." and return unless @suggestion_box 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @suggestion } 
    end 
    end 

    def create 
    @suggestion_box = SuggestionBox.find(params[:suggestion_box_id]) 
    @suggestion = @suggestion_box.suggestions.new 

    respond_to do |format| 
     if @suggestion.save 
     format.html { redirect_to suggestion_box_path(@suggestion_box), notice: 'Suggestion was successfully submitted.' } 
     format.json { render json: @suggestion, status: :created } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @suggestion.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
end 

SuggestionBox Контроллер

class SuggestionBoxesController < ApplicationController 
    def show 
     @suggestion_box = SuggestionBox.find(params[:id]) 
     @suggestions = @suggestion_box.suggestions.all 

     respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @suggestions } 
     end 
    end 
    end 

ответ

1

Зачем использовать вложенную форму, так как вы только создать предложение?

= form_for @suggestion do |f| 

Все остальное должно быть оставлено без изменений, и оно должно работать.

BTW, так как вы не используете вложенные атрибуты, вам не нужны ни accepts_nested_attributes_for :suggestions, ни attr_accessible :suggestions_attributes в вашей модели SuggestionBox.

+0

Спасибо за указание, что мне не нужны accepts_nested_attributes. Число рейнольдса использование вложенной формы, мне показалось бы иметь смысл вставлять предложения в ящики предложений, чтобы можно было легко генерировать семантически значимые URL-адреса, а также предотвращать необходимость выбора окна предложений при добавлении нового выбора , Однако, если это не веские причины или наличие вложенных ресурсов в целом плох, я изучу подход к этому без наличия вложенных ресурсов. – andersr

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