Вложенные атрибуты Rails "неявное преобразование символа в целое число" для ассоциации has_many - PullRequest
0 голосов
/ 29 сентября 2018

Ниже приведены коды моделей.

user.rb

  has_many :teams, dependent: :destroy
  has_many :companies, dependent: :destroy

  after_create :create_tables!

  def create_tables!
    companies.create!
    Team.create!(user_id: self.id, company_id: Company.where(user_id: self.id).first.id)
  end

company.rb

belongs_to :user    

has_many :teams, inverse_of: :company, dependent: :destroy
has_many :users, through: :teams

accepts_nested_attributes_for :teams

team.rb

belongs_to :user
belongs_to :company, inverse_of: :teams

Ниже приведены коды моего контроллера

companies_controller.rb

def new
    @company = current_user.companies.new
    @company.build_teams
end


def update
    current_user.companies.first.update_attributes(company_params)
    respond_to {|format| format.js}
end

  private

  def company_params
    params.require(:company).permit(:name, :about, :problem, :solution, :logo, :url, :email, :phone, :category, :started_in,
                                    teams_attributes: [:position, :admin])
  end

В представлениях

<%= form_with model: @company, method: :put do |f| %>
  <%= f.fields_for :teams_attributes, @company.teams.first do |team| %>
              <%= team.hidden_field :admin, value: true %>
              <%= team.text_field :position, placeholder: 'Eg: CEO', class: 'input' %>
          <% end %>
<%= f.submit 'Next' %>
<% end %>

Когда я пробую это в консоли rails, это работает и сохраняется в БД, в представлениях параметры также проходят хорошо.Его ниже

params passing in browser

Но во взглядах написано

TypeError in CompaniesController#update no implicit conversion of Symbol into Integer

1 Ответ

0 голосов
/ 29 сентября 2018

Должно быть f.fields_for :teams вместо f.fields_for :teams_attributes

<%= form_with model: @company, method: :put do |f| %>
  <%= f.fields_for :teams, @company.teams.first do |team| %>
    <%= team.hidden_field :admin, value: true %>
    <%= team.text_field :position, placeholder: 'Eg: CEO', class: 'input' %>
  <% end %>
  <%= f.submit 'Next' %>
<% end %>
...