2

Использование рельсов 4 и рубина 2.Rails вложенные атрибуты формы не сохраняются

Не удалось сохранить вложенные атрибуты из вложенной формы. Я вижу, что параметры поступают через форму после отправки. У меня есть 2 таблицы: документы и зарплата. Я проверил журналы, и единственная таблица, которая получает вставку, - это зарплата, а не документы. В чем может быть проблема?

модели:

class SalaryReport < ActiveRecord::Base 

    STATUS = %w[new waiting_for_approval approved dissaproved] 

    belongs_to :user 

    has_many :documents 

    accepts_nested_attributes_for :documents 
end 


class Document < ActiveRecord::Base 

    TYPES = %w[sales valuation mileage expense] 

    belongs_to :salary_report 
end 

контроллер

def new 
    @salary_report = SalaryReport.new 
    @salary_report.documents.build 
    end 

    def create 
    @salary_report = SalaryReport.new(salary_report_params) 

    if @salary_report.save 
     redirect_to salary_reports_path, notice: "Lönerapporten sparades korrekt!" 
    else 
     render :new, notice: "Något gick fel när lönerapporten skulle sparas!"  
    end 

    end 

private 
    def salary_report_params 
    params.require(:salary_report).permit(:user_id, :approved_by_admin_id, :status,  :comment_from_created_by, :comment_from_admin, :total_sales_since_year_start, :date_sent,  :date_of_approval, :total_buffer, :salary_period, documents_attributes: [:id, :description, :type,  :total]) 
end 

Войти после отправки формы:

Started POST "/salary_reports" for 127.0.0.1 at 2013-07-18 10:36:53 +0200 
Processing by SalaryReportController#create as HTML 
Parameters: {"utf8"=>"✓",  "authenticity_token"=>"kIge4NYVVxnwuhB7JBQdIXXCV+2eNFXy7m1GBrxGbY0=", "salary_report"=> {"user_id"=>"1", "approved_by_admin_id"=>"", "status"=>"new",  "total_sales_since_year_start"=>"", "date_sent"=>"2013-07-18", "total_buffer"=>"",  "salary_period(3i)"=>"1", "salary_period(2i)"=>"7", "salary_period(1i)"=>"2013",  "comment_from_created_by"=>"comments"}, "documents"=>{"description"=>"something",  "type"=>"sales", "total"=>"2323"}, "commit"=>"Skicka till admin för godkännande"} 
    (0.1ms) begin transaction 
    SQL (0.8ms) INSERT INTO "salary_reports" ("comment_from_created_by", "created_at",  "date_sent", "salary_period", "status", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?,  ?) [["comment_from_created_by", "comments"], ["created_at", Thu, 18 Jul 2013 08:36:53 UTC  +00:00], ["date_sent", Thu, 18 Jul 2013 00:00:00 UTC +00:00], ["salary_period", Mon, 01 Jul  2013 00:00:00 UTC +00:00], ["status", "new"], ["updated_at", Thu, 18 Jul 2013 08:36:53 UTC  +00:00], ["user_id", 1]] 
    (4.4ms) commit transaction 
    (0.2ms) begin transaction 
    (0.2ms) commit transaction 
Redirected to http://localhost:3000/salary_reports 
Completed 302 Found in 62ms (ActiveRecord: 5.7ms) 

мнение выглядит следующим образом:

<%= form_for @salary_report, :html => { :class => "well"} do |f| %> 
    <%= f.label :salary_period %> 
    <%= f.date_select :salary_period, :as => :date, :order => [:month, :year] %> 
    <%= f.label :comment_from_created_by %> 
    <%= f.text_area :comment_from_created_by %> 
    <%= f.label :comment_from_admin %> 
    <%= f.text_area :comment_from_admin, :disabled => true %> 
    <%= fields_for :documents do |builder| %> 
     <%= render "document_fields", :f => builder %> 
    <% end %> 
    <%= link_to_add_fields "ny rad", f, :documents %>   
    <%= f.submit "Skicka till admin för godkännande", disable_with: 'Skickar....', :class => "btn btn-success" %> 

<% end %> 

ответ

1

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

<%= f.fields_for :documents do |builder| %> 
    <%= render "document_fields", :f => builder %> 
<% end %> 
+0

yay! это сработало. Благодаря! –

+0

К сожалению, я получаю следующую ошибку: Недопустимый тип наследования для одной таблицы: sales не является подклассом документа –

+1

: type является зарезервированным атрибутом для ссылок на имена других моделей. Попробуйте называть его что-то вроде: kind вместо этого. – Scymex

1

Попробуйте

private 
     def salary_report_params 
     params.require(:salary_report).permit(:user_id, :approved_by_admin_id, :status,  :comment_from_created_by, :comment_from_admin, :total_sales_since_year_start, :date_sent,  :date_of_approval, :total_buffer, :salary_period, documents_attributes: [:id, :description, :type,  :total]) 
    end 

Вы должны пройти «идентификатор» в document_attributes ... Не очень хорошо документированы в это время ...

Приветствия

+0

I добавлено: id к document_attributes (редактирование в моем вопросе), но это, похоже, не помогло. Также добавлен лог на вопрос, если это поможет. –

0

Ну изменение имен колонки работает, но, как правило, правильный способ решить это путем отключения inheritance_column особенность этой модели. Использование Rails У вас есть привилегия использовать зарезервированные ключевые слова also.if вы хотите использовать имя : тип затем Просто добавьте это в model.rb файла

self.inheritance_column = nil 

Надеется, что это помогает

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