ruby on rails costum show / index方法

时间:2013-11-08 22:27:19

标签: ruby-on-rails

基本上我有这个:

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

通过脚手架方法自动生成,但现在我希望有一个显示所有数据的get方法(默认工作),以及更多1用于按发件人搜索,如notifs?sender = name或其他

我尝试将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'

尽管我有两种不同的方法,但我更喜欢简单/快捷的方法...... 谢谢:))

1 个答案:

答案 0 :(得分: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