2016-02-29 2 views
0

Я использую Rails 4.2.3 с MySql 5.5.37. Недавно я изменил имя и тип моего столбца, и теперь, когда я отправляю форму Rails в поле формы, «selection_id» не получает захвата. Ниже мой Rails форма ...Почему Rails не захватывает одну из моих представленных параметров parametesr в моем контроллере?

 <div class="field"> 
     <%= f.label :day %><br> 
     <%= f.hidden_field :day, :validate => true %> 
     <div id="datepicker"></div> 
     </div> 
     <div class="field"> 
     <%= f.label :selection_id %><br> 
     <div class="styled-select"><%= collection_select(:user_selection, :selection_id, @selections, :id, :description, {:prompt => true}) %></div> 
     </div> 
     <div class="field"> 
     <%= f.label :total %><br> 
     <%= f.text_field :total, :size => 4, :validate => true %> 
     </div> 

А вот это HTML, который получает выход в браузер ...

<div class="field"> 
     <label for="user_selection_day">Day</label><br> 
     <input validate="true" type="hidden" value="02/07/2016" name="user_selection[day]" id="user_selection_day" /> 
     <div id="datepicker"></div> 
    </div> 
    <div class="field"> 
     <div class="field_with_errors"><label for="user_selection_selection_id">selection</label></div><br> 
     <div class="styled-select"><div class="field_with_errors"><select name="user_selection[selection_id]" id="user_selection_selection_id"><option value="">Please select</option> 
    <option value="3">option 1</option> 
    <option value="4">option 2</option></select></div></div> 
     </div> 
     <div class="field"> 
     <label for="user_selection_total">Total</label><br> 
     <input size="4" validate="true" type="text" value="1" name="user_selection[total]" id="user_selection_total" /> 
     </div> 

Я могу видеть эти данные получать представленные в Chrome ...

user_selection[day]:02/19/2016 
    user_selection[selection_id]:3 
    user_selection[total]:9 

но на моей стороне контроллера, когда я пытаюсь вывести параметры, только два из трех печатают. Это «заносит»

 def create 
     @current_user = User.find(session["user_id"]) 
     ... 
     puts user_selection_params 

печатает

{"day"=>"02/19/2016", "total"=>"9"} 

Почему это другое поле заблудился и как я могу это исправить?

+0

И ваш 'user_object_params' определяется как ...? Вероятно, вам не хватает ': object_id' из разрешенного списка атрибутов. Вы должны иметь: 'params.require (: user_object) .permit (: day,: total,: user_id)' – BroiSatse

+0

О, хорошо, taht's, где я пропустил это. Забыл определить его там. Спасибо, - – Dave

ответ

1

У вас возникла эта проблема, потому что #object_id - это метод, определенный для объекта, класса, который распространяется на все объекты Ruby. Другими словами, он зарезервирован самим Ruby и не может использоваться при присвоении имени/полям атрибутов базы данных. Вам придется переименовать этот столбец/ассоциацию в другое.

В качестве примечания стороны, это не идиоматический Ruby, чтобы включить слово «объект» в ваше имя класса. Вероятно, класс следует просто называть User, а не UserObject.

Ссылка: http://ruby-doc.org/core-2.3.0/Object.html#method-i-object_id

1

Пожалуйста, не используйте object_id в вашей модели.

Не должно быть столбец с именем object_id в базе данных .

object_id является стандартными методами, что все (кроме BasicObject в Ruby 1.9) объекты имеют ...

(см docs).

+0

Я фактически не использовал «object_id», taht был просто запутанным кодом для цели вопроса. Во всяком случае, ответ на мой вопрос ответил на это. – Dave