1

だから基本的に私はこれを持っています:

create_table "notifs", force: true do |t|
      t.string   "desc"
      t.string   "sender"
      t.string   "receiver"
      t.datetime "created_at"
      t.datetime "updated_at"
end

scaffold メソッドによって自動生成されますが、すべてのデータを表示する get メソッド (default-Working) と、notifs?sender=name などの送信者で検索するための 1 つが必要です。

私はすでに Index メソッドを次のように変更しようとしました:

def index
    if params[:sender].present?
      @notifs = Notif.find_by_sender(params[:sender]);
    else
      @notifs = Notif.all
    end
end

しかし結果は

undefined method `each' for #<Notif:0x38c6e98>
-------
app/views/notifs/index.html.erb:19:in `_app_views_notifs_index_html_erb__382580733_32546088'

新しいルートも作ってみた

get '/searchsender' => 'notifs#searchsender'
--------
# get /searchsender
# get /searchsender
def searchsender
    @notifs = Notif.find_by_sender("asd") #"asd" hardcoded, just for testing
  if !@notifs
    render :json=>{:notif=>"not working"}
  else
    render action: 'show', status: :created, location: @notifs  
  end  
end

しかし結果は

undefined method `desc' for nil:NilClass
-------
app/views/notifs/show.html.erb:5:in `_app_views_notifs_show_html_erb__30604837_29852568'
app/controllers/notifs_controller.rb:91:in `searchsender'

私には2つの異なる方法がありますが、私は簡単で最速の方法を好みます...ありがとう:)

4

1 に答える 1

1

find_all_byの代わりに使用しfind_byます。前者は条件に一致するレコードの配列を返し、後者は条件に一致する最初のレコードを返します。eachそのため、単一のオブジェクトで呼び出されたビューでは、エラーが発生しました: undefined method each for #<Notif:0x38c6e98>.

def index
    if params[:sender].present?
      @notifs = Notif.find_all_by_sender(params[:sender]);
    else
      @notifs = Notif.all
    end
end
于 2013-11-08T22:36:51.337 に答える