11

好吧,再次忘记我在 Rails 中的菜鸟,但我也没有找到这个。虽然我认为这可能是因为......它不存在?

好的,所以我还在玩 RoR,我为员工添加了一个控制器,非常简单,只是一个名字、clock_no 和工资。但是,如果我不想通过 ID 搜索员工怎么办?对我来说,用户按时钟编号搜索会更容易,但我不知道它是如何工作的。我假设它与这条线有关,更具体地说是 set_employee 线:

private
# Use callbacks to share common setup or constraints between actions.
def set_employee
  @employee = Employee.find(params[:id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def employee_params
  params.require(:employee).permit(:name, :clock_no, :wage)
end

但是我可能会走得很远。

好的,所以我的解决方案最终只是更改模型中的 primary_key:

self.primary_key = 'clock_no'

并将返回设置为 json:

def show
@employee = Employee.find(params[:id])
 respond_to do |format|
   format.html
   format.json { render json: @employee }
 end
end

但是,我不认为这真的是所有解决方案的最终解决方案,我的noobiness 可能再次表现出来,但对我来说似乎有点曲棍球。如果您想通过说名称或其他不是主键并且无法像我的情况那样更改主键的东西来搜索,我会怎么做? 鼻子回到文档

4

3 回答 3

22

使用where

Employee.where(clock_no: params[:clock_no])

where返回一个 ActiveRecord 关系,所以如果你需要第一个(如果 clock_no 是唯一的,可能只有实例),使用first,像这样:

Employee.where(clock_no: params[:clock_no]).first

这将只执行一个 SQL 查询来获得第一个 Employee 匹配clock_no

曾经有类似 的魔法查找器find_by_clock_no,但从 Rails 4 开始不推荐使用,我假设您正在使用它。

另请参阅Rails 文档以获取有关 ActiveRecord 查询的更多信息。

于 2013-07-19T21:34:15.857 回答
3

尝试使用基于动态属性的查找器,如下所示:

    Employee.find_by_clock_no(params[:clock_no])

检查文档以获取更多信息。

于 2013-07-19T23:27:13.947 回答
0

我认为现在下一个语法是首选:

Employee.find_by(clock_no: params[:clock_no])
于 2021-03-10T17:22:42.633 回答