改变传递的参数

时间:2015-12-05 19:36:35

标签: ruby-on-rails forms ruby-on-rails-4 parameter-passing

我需要将一个参数传递给一个辅助方法,但它不是一个整数。为什么我的param[:trait]显示为{:value=>"1"}而不是1?我正在尝试将其传递给名为create_personality(trait)的帮助器,它不会接受create_personality(params[:trait]) ...但它可以正常使用create_personality(1) ...如果我只是将预期的值放入括号。

cats_helper.rb

module CatsHelper
  def personalities(trait)
    if trait == 1
     'Happy Cat'
    elsif trait == 2
      'Sad Cat'
    else
    end
  end

end

pet.rb

class Pet < ActiveRecord::Base
  include CatsHelper

  def create_personality(trait)
    personality_kind = personalities(trait)
    PetTrait.create!(personality: personality_kind, pet_id: self.id )
  end

end

pets_controller.rb

class PetsController < DashboardController

  def create
    @new_pet = Pet.new(pet_params)
    trait =  params[:trait]
    puts "#{trait}" *1000 #This is how I know that {:value=>"1"} is being passed
    respond_to do |format|
      if @new_pet.save
        @new_pet.create_personality(trait)# <---- here is the call to the method
        format.html { redirect_to pet_path(@new_pet)}
        format.json {  render   }
      else
       # etc....
      end
    end
  end
end

_form.html.slim

      = simple_form_for [@new_pet], multipart: true do |f|
       = f.hidden_field :trait, value: 1

4 个答案:

答案 0 :(得分:1)

或者如果您只需要整数值,请使用trait = params[:trait][:value].to_i

答案 1 :(得分:1)

我不相信f.hidden_fieldsimple_form语法。这是标准的导轨。

试试这个:

f.input :trait, :as => :hidden, :input_html => { :value => 1 }

答案 2 :(得分:0)

如果trait不是宠物专栏,您应该尝试使用

= hidden_field_tag :trait, 1 

答案 3 :(得分:0)

最终工作的结果是两个答案的混合。这是工作控制器方法......注意&#34; to_i&#34;需要在方法调用中工作......它应该是params [:pet] [:trait]。

 def create
    @new_pet = Pet.new(pet_params)
    trait =  params[:pet][:trait]
    respond_to do |format|
      if @new_pet.save
        @new_pet.create_personality(trait.to_i)# <---- here is the call to the method
        format.html { redirect_to pet_path(@new_pet)}
        format.json {  render   }
      else
       # etc....
      end
    end
  end