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

ただし、これが本当にすべての解決策であるとは思いません。これも私の初心者が示している可能性がありますが、私にはちょっとホッケーのようです. 私のホールドアップは、名前などで検索したい場合、または主キーではなく、私の場合のように主キーを変更できなかった場合はどうなるでしょうか? ドキュメントに戻る

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 クエリが 1 つだけ実行され、一致する最初の Employee が取得されますclock_no

以前は のようなマジック ファインダーがありましfind_by_clock_noたが、それらは Rails 4 の時点で非推奨になっているため、使用していると思います。

ActiveRecord クエリの詳細については、 Rails のドキュメントも参照してください。

于 2013-07-19T21:34:15.857 に答える
3

次のように、動的な属性ベースのファインダーを使用してみてください。

    Employee.find_by_clock_no(params[:clock_no])

詳細については、ドキュメントを確認してください。

于 2013-07-19T23:27:13.947 に答える