我需要将一个参数传递给一个辅助方法,但它不是一个整数。为什么我的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
答案 0 :(得分:1)
或者如果您只需要整数值,请使用trait = params[:trait][:value].to_i
答案 1 :(得分:1)
我不相信f.hidden_field
是simple_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