在Rails中,如何将params [:id]转换为Integer

时间:2015-12-30 21:44:48

标签: ruby-on-rails ruby parameters casting

伙计我正在尝试使用params[:id]从数据库中检索特定记录。

 x = Authors.find(params[:id])

我们不能将 FIND 与此类字符串一起使用,因为该参数始终由 HTTP 作为字符串传递:

我也试过这段代码,但我不知道为什么它总是返回 0 ,而传递的参数是 4

 x = Authors.find(params[:id]).to_i 

那么我怎样才能为强制转换ID参数或任何方法转换HTTP传递字符串为整数

4 个答案:

答案 0 :(得分:2)

您不必将字符串转换为整数以使用find。它应该能够为你转换字符串。

Just to give an example:
Author.find(2) # => #<Author:1234>
Author.find("2") # => #<Author:1234>
Author.find("2") == Author.find(2) # => true

尝试使用pry查看您传递的内容是否正确。希望这有助于清除方法。

答案 1 :(得分:1)

我想你可能只是放错了你的类型转换:

x = Authors.find(params[:id].to_i)

答案 2 :(得分:0)

你可以用这个:

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Auth\Passwords\CanResetPassword;

class User extends Authenticatable
{
    use SoftDeletes, CanResetPassword;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'handle', 'email', 'password', 'confirmation_code'
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'last_ip', 'updated_at', 'email', 'confirmed', 'confirmation_code', 'updated_at', 'deleted_at'
    ];

    protected $dates = ['last_logged_in', 'last_activity', 'created_at', 'updated_at', 'deleted_at'];
}

然而,

x = Authors.find(params[:id].to_i)

也正确,因为它返回正确的作者。 在使用上述之前,您可以检查params [:id]是否存在:

x = Authors.find(params[:id])

答案 3 :(得分:0)

在我尝试抓取的参数上使用方法 .inpect 之后,我发现它是零。我错误地抓住了它。顺便说一下,我试图抓住另一个参数而不是:id 但是:artCatNam e以下是我传递的参数: {"utf8"=>"✓", "authenticity_token"=>"tQetEjfE+stm/yXfQWyS9pEhznu+zeNwrHPa6BNjWsfd4bcv/PFsYRcMT‌​1L8y2obJt6xNTcoOFNgzq6R6OcjMw==", "category"=>{"artCatName"=>"1"}, "article"=>{"artTitle"=>"bb", "artBody"=>"b"}, "commit"=>"Publish", "controller"=>"articles", "action"=>"create"}

我在这里抓取:artCatName 以及我如何转换为整数

params[:category][:artCatName].to_i