Я использую rails 4.2, и у меня есть форма, которая пытается сделать вставку в модель Response для каждого флажка коллекции_check_boxes. Когда я делаю это, у меня нет никаких ошибок и один из атрибутов, adjective_id, он не сохраняется.Невозможно вставить массив идентификаторов в таблицу соединений с has_many: через ассоциацию
Здесь вы можете увидеть, как пары выглядят, когда я выбираю 4 из 58 флажков:
"response"=>{"relation"=>"family", "adjective_id"=>["2", "14", "16", "28", ""]}, "commit"=>"Answer", "survey_sruid"=>"d5e7b675370614d1331f"}
Здесь вставка:
INSERT INTO "responses" ("relation", "survey_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["relation", "3"], ["survey_id", 1], ["created_at", "2015-02-11 02:39:41.409276"], ["updated_at", "2015-02-11 02:39:41.409276"]]
Мне нужно, чтобы получить adjective_id в заявление о вставке, примерно следующее:
INSERT INTO "responses" ("relation", "survey_id", "adjective_id", "created_at", "updated_at")
- Как я могу это получить, чтобы правильно вставить?
- Есть ли способ сделать 1 строку в таблицах ответов с теми же «отношениями», «survey_id», «created_at» и «updated_at» для каждого «adjective_id» в массиве params?
Модели
class Survey < ActiveRecord::Base
has_many :responses
has_many :adjectives, through: :responses
belongs_to :nruser
end
class Response < ActiveRecord::Base
belongs_to :survey
belongs_to :adjective
end
class Adjective < ActiveRecord::Base
has_many :responses
has_many :surveys, through: :responses
end
schema.rb:here
Контроллер
class ResponsesController < ApplicationController
def new
@survey = Survey.find_by(sruid: params[:survey_sruid])
@response = @survey.responses.build
end
def create
@survey = Survey.find_by(sruid: params[:survey_sruid])
@response = @survey.responses.create(response_params)
redirect_to root_path
end
private
def response_params
params.require(:response).permit(:relation, { :adjective_id => [] })
end
end
Маршруты
Rails.application.routes.draw do
root 'static_pages#home'
resources :surveys, only: [:new, :create, :show, :destroy]
resources :surveys, param: :sruid, only: [:create] do
resources :responses, only: [:new, :create]
end
resources :adjectives, only: [:index]
end
Форма
<%= form_for @response, url: survey_responses_path do |r| %>
<aside class="col-md-3">
<%= r.label :relation, @survey.nruser.name.titleize + " es un:" %>
<p><%= r.select :relation, options_for_select([['familiar', 3], ['amigo', 2], ['colega', 1], ['conocido',0]]) %></p>
</br>
<%= r.submit "Responder YA!", class: "btn btn-success" %>
</aside>
<aside class="col-md-9">
<div class="btn-group" data-toggle="buttons">
<%= r.collection_check_boxes :adjective_id, Adjective.all, :id, :adjective do |b|
b.label(class: 'btn btn-primary') {b.check_box + b.text}
end %>
</div>
</aside>
<% end %>
Я надеюсь, что это ясный вопрос. Я ноб с рубином на рельсах, поэтому я был бы благодарен за любой ответ, чтобы прояснить мои вопросы.
Спасибо!
Вы видели [это] (https://stackoverflow.com/questions/28049879/strong-parameters-unpermitted-parameters-tags-in-has-many-through-relation) вопрос и ответы? – pdoherty926
Хорошо, я просто прочитал этот пост, спасибо за ответ. Поэтому в моем случае разрешен параметр: adjective_id. Теперь, единственный способ назначить значения, которые он выполняет, разделяет мой массив, как в этом ответе?и Почему рельсы не признают, что adjective_id является атрибутом ответа объекта? –