-1

レール上のルビーの初心者です)わかりました、インデックスアクションを備えたコントローラーがあります:

    def index
     condition = ['fulltime','parttime','remote','forone']. select{ |t|  params.has_key?(t.to_sym) }.join(' | ')
 Advert.search params[:search],:order => :created_at, :sort_mode => :desc,  :conditions => {:employment_type=>condition}

しかし、それはコードの平和です:

 ['fulltime','parttime','remote','forone']. select{ |t|  params.has_key?(t.to_sym) }

ゼロを返す

どうして?:))

次のような一連のチェックを含むコードを書きたくありません。

    if !fulltime.nil? && !fulltime.blank?
      condition = "fulltime"
    end


    if !parttime.nil? && !parttime.blank?
      if !condition.nil? && !condition.blank?
          condition = condition + " | parttime"
      else
        condition ="parttime"
      end

end

しかし、array.select メソッドを使用した私の方法は機能しません:(

アドバイスをいただけませんか?) ありがとうございます!

4

1 に答える 1

0

次のようにirbでコードを試しました:

> params = { :fulltime => "1" }
=> {:fulltime=>"1"}
> ['fulltime','parttime','remote','forone']. select{ |t|  params.has_key?(t.to_sym) }.join(' | ')
=> "fulltime"

それで、それはうまくいっています。そのコードから nil を取得している場合は、パラメーターが nil に設定されているか、パラメーターにキーとして ['fulltime','parttime','remote','forone'] がありません。

Railsのパラメータの説明をチェックしてください。スレッド; パラメータを正しく設定する方法についてのアイデアを与える可能性があります。

于 2012-10-17T07:01:11.553 に答える