Установка атрибута объекта из скрытого поля Ruby on Rails
Я пытаюсь обновить Idea
атрибут challenge_id
через скрытое поле формы. Вот поле:
<%= f.hidden_field :challenge_id, :value => @challenge.id %>
Он успешно передает идентификатор запроса в качестве параметра при создании идеи в методе Idea Controller#create:
Started POST "/ideas.js" for ::1 at 2015-06-18 15:39:49 -0400
Processing by IdeasController#create as JS
Parameters: {"utf8"=>"✓", "idea"=>{"title"=>"adsf", "description"=>"asf", "domain_tokens"=>"20", "challenge_id"=>"5"}, "commit"=>"Create Idea"}
это challenge_id => 5
Затем следует сохранить в идее в строке @idea = Idea.new(idea_params)
ниже:
ideas_controller.rb
def create
@idea = Idea.new(idea_params)
respond_to do |format|
if @idea.save
idea_count = @idea.user.ideas_created_count
@idea.user.update(:ideas_created_count => idea_count + 1)
@idea.domains.each do |domain|
current_user.add_points(1, category: domain.title)
end
@ideas = current_user.current_team.ideas.sort_by{|i| i.heat_index}.reverse
@ideas = @ideas.paginate(:page => params[:ideas_page], :per_page => 10)
format.html { redirect_to :back, notice: 'Idea was successfully created.' }
format.json { render :show, status: :created, location: @idea }
format.js
else
format.html { redirect_to :back, notice: "You must attach domains to your Idea." }
format.json { render json: @idea.errors, status: :unprocessable_entity }
format.js { render :create_failed }
end
end
end
.
.
def idea_params
params.require(:idea).permit(:title, :description, :challenge_id)
end
Однако этот идентификатор не сохраняется в idea
с другим разрешенным idea_params
, :title
а также :description
, Как я могу получить challenge_id
быть сохраненным в Идею, когда она будет создана?
2 ответа
Вместо того, чтобы использовать скрытое поле, почему бы не передать challenge_id в вашей форме? В противном случае вы оставляете открытой возможность того, что пользователи могут вводить в это скрытое поле все, что они хотят.
Форма:
form_for [@challenge, Idea.new] do |f|
А потом:
def create
@challenge = Challenge.find(params[:challenge_id])
@idea = Idea.new(idea_params)
@idea.challenge_id = @challenge.id
end
Я предполагаю, что у вас есть столбец challenge_id в таблице идей.
Попробуйте что-то вроде:
def create
@idea = Idea.new(idea_params)
@idea.challenge_id = params[:idea][:challenge_id]
#...
end
Если параметры или столбцы, в которые вы хотите сохранить данные, отличаются, внесите изменения, но вы поняли идею.