Параметр формы не сохраняется должным образом в Rails - PullRequest
0 голосов
/ 13 июля 2011

Итак, у меня есть это действие для сохранения модели:

def create
    logger.debug(params[:user_id])
    group_id = params['approver']['group_id']
    @approver = Approver.new(params[:approver])
    @approver.user_id = params[:user_id]

    respond_to do |format|
      if @approver.save
        logger.warn("Approver saved!")
        flash[:notice] = "New approver has been added!"
        format.html { redirect_to(group_path(group_id)) }
      else
        flash[:notice] = "Sorry .. had issues adding the approvers!"
        format.html { redirect_to(group_path(group_id)) }
      end
    end
  end

Передаваемые параметры:

Parameters: {"commit"=>"Submit", "authenticity_token"=>"C35lovRRjJzekruZiwTZjaMs4KgwiEJnXn10b0nD+0w=", "utf8"=>"✓", "user_id"=>["18"], "approver"=>{"group_id"=>"13"}}

И, глядя на мои журналы, отладочное сообщение в действии выводит «13» в качестве правильного значения. Однако значение, вставляемое в базу данных, всегда равно «1», и вот фрагмент из журналов:

INSERT INTO `approvers` (`user_id`, `updated_at`, `created_at`, `group_id`) VALUES (1, '2011-07-13 04:58:51', '2011-07-13 04:58:51', 13)

Чтобы еще больше усложнить ситуацию, для отладки, если я изменю строку 5 действия на:

@approver.user_id = 19

все отлично работает.

Может кто-нибудь объяснить, что я делаю не так?

1 Ответ

1 голос
/ 13 июля 2011

group_id не ваша проблема, с ней все в порядке.Ваша проблема заключается в следующем:

"user_id"=>["18"]

Так что params[:user_id] на самом деле массив, но вы воспринимаете его как идентификатор.Затем кто-то внутри Rails конвертирует этот массив в 1. Когда вы говорите:

@approver.user_id = 19

Все работает, потому что вы назначаете Fixnum для user_id, и это то, что ожидает user_id.

Вам нужно выяснить, почему вы получаете массив user_id, а затем исправить это.Или выясните, что вы должны делать с массивом, возможно, @approver.user_id = params[:user_id][0] имеет смысл, а может и нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...