2013-09-21 4 views
0

Когда я создаю скид, я пытаюсь получить значение, введенное пользователем, чтобы я мог создать эту запись много раз.Передача значения из текстового поля ввода в контроллер

in _form.html.erb где находится весь мой код. и в new.html.erb где я вызываю форму с:

<%= render 'form' %>

Вот кусок кода из формы, что я пытаюсь получить доступ к:

<%= f.label :skid_count %> 
    <%= f.number_field :skid_count, :value => '1', :required => 'required', :pattern => ValidationValues.c_integer, :placeholder => ValidationValues.p_integer %> 

В контроллере Я пытаюсь сделать это:

def create 
    @skid = Skid.new(params[:skid]) 

    count = params[:skid_count].to_i 

    # Create record in the database, and return an appropriate message 
    respond_to do |format| 
     if @skid.save 
     for i in 1..count 
      Skid.new(params[:skid]).save 
     end 

     format.html { redirect_to @skid, notice: 'Skid was successfully created.' } 
     format.json { render json: @skid, status: :created, location: @skid } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @skid.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

по какой-то причине переменная счетчика не подбирая число, если я жесткий код его и положить 3 там, было бы создать запись в 4 раза только как и предполагалось, однако, если я попытаюсь получить числовое значение, основанное на введенном пользователем, как показано выше, оно не работает. Он создает только 1 запись каждый раз.

Есть ли причина, по которой я не могу получить доступ к этому параметру?

+0

Проверьте журнал и, пожалуйста, отправьте параметры, которые поступают с запросом – nachbar

+0

@nachbar Я не знаю, как это сделать ... не могли бы вы объяснить? Я очень новичок в ruby и rails ... – Bojan

+0

Если вы используете тестовый сервер в режиме разработки, журнал будет находиться в подкаталоге logs ваше приложение Rails и будет development.log. Этот файл будет перечислять для каждого запроса все параметры, передаваемые Rails с запросом, с меткой времени. Кроме того, если вы используете сервер в окне терминала, параметры также будут отображаться там, но могут быть слишком быстрыми, чтобы их видеть. – nachbar

ответ

0

Я решил этот вопрос, получив значение из атрибута таким образом:

count = params[:skid]["skid_count"] 

Я надеюсь, что это помогает кто-то споткнулся с той же проблемой.

0

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

def create 
    @skid = Skid.new(params[:skid]) 

    # Create record in the database, and return an appropriate message 
    respond_to do |format| 
    if @skid.save 
    count = params[:skid_count].to_i # if the record saves, create variable with the new params 
    for i in 1..count     # do your magic 
     Skid.new(params[:skid]).save 
    end 
+0

нет, он все еще не работает, он все еще создает только 1 запись – Bojan

0

Я объясню, почему.

По мере создания поля с помощью form_for helper он автоматически привязывает его к атрибутам модели в хеше param.

params[:skid][:skid_count] будет работать, а

если вы хотите :skid_count быть вне Params хэша (чтобы не вызвать запрещенные атрибуты в новых версиях рельсов, вы можете создать его, используя только number_field_tag(:skid_count), которые бы им быть доступный вашему контроллеру как params[:skid_count]

Смежные вопросы