0

私は次の部分を備えたRailsコントローラーを持っています:

def search
  ...
  @player_to_team_histories = @player_to_team_histories.order(sort_column + " " + sort_direction)
  ...

sort_columnおよびsort_directionは次のように定義されます(@player_to_team_historiesActiveRecordAssociation:です

private

  def sort_column
    params[:sort] || "players.LastName"
  end

  def sort_direction
    params[:direction] || "asc"
  end

orderしたがって、これら2つの関数から返されたテキストは、の句に挿入され@player_to_team_historiesます。

この検索機能を別のコントローラーで複製する必要があるため、検索ロジックをPlayerToTeamHistoriesモデルに移動し、paramsハッシュをパラメーターとしてsearch関数に渡しました。スケルトンコード:

def self.search_results(params)
 ...
  @player_to_team_histories = @player_to_team_histories.order(sort_column(params) + " " + sort_direction(params))
 ...

モジュールで定義しようsort_column(params)としましたが、エラーが発生し続けたため、実装をモデルの下部に移動しましたsort_direction(params)undefined method or variable sort_columns

def sort_column(params)
  params[:sort] || "players.LastName"
end

def sort_direction(params)
  params[:direction] || "asc"
end

それでも未定義のメソッドエラーが発生します。私はそれを次のように単純化してみました:

def sort_column
  "players.LastName"
end

def sort_direction
  "asc"
end

しかし、それでも機能しませんでした(関数の呼び出しを更新してなしにしましたparams)。

モデル内の別の関数内からヘルパー関数を呼び出せない理由はありますか?

Rails 3.2.1、Ruby 1.9.2

4

1 に答える 1

1

メソッドがモデルにある場合、それらはインスタンスのものです。あなたはそれらを次のように呼ぶべきです:

def self.search_results(params)
 ...
  @player_to_team_histories = @player_to_team_histories.order(@player_to_team_histories.sort_column + " " + @player_to_team_histories.sort_direction)
 ...
end
于 2012-11-15T03:36:34.983 に答える