Установка атрибута объекта из скрытого поля 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

Если параметры или столбцы, в которые вы хотите сохранить данные, отличаются, внесите изменения, но вы поняли идею.

Другие вопросы по тегам