【发布时间】:2015-12-05 19:36:35
【问题描述】:
我需要将参数传递给辅助方法,但它没有显示为整数。为什么我的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
【问题讨论】:
-
由于您使用
form,因此该值应包装到pet资源中。如果你打电话给params[:pet][:trait],你会得到什么价值? -
0 ...特征不是宠物的列
-
你检查过 HTML 吗?我认为这是客户端的问题。如果这个网站是在线的或开源的,你可以给我一个链接,我会检查它。
-
两者都不是,不过谢谢
-
我已经快速复制了您的场景并且效果很好。只需查看Repo 并告诉我是否有不同之处。我只是使用了一个快速脚手架并安装了
simple_form。
标签: ruby-on-rails forms ruby-on-rails-4 parameter-passing