我正在尝试使用Sinatra中的Sequel从PostgreSQL数据库中检索数据。
DB = Sequel.connect('postgres:// connection_data')
items = DB [:items]
然后我尝试获取具有特定ID的条目:
get '/:id' do
@item = items.filter(:id => params[:id])
erb :edit
end
在我的编辑视图中,我想显示@item变量的内容。问题是我不知道如何获得ID。
<% if @item %>
<a href="/<%= @item.id %>/doit">Do something</a>
<% else %>
<p>Item not found.</p>
<% end %>
我尝试使用@ item.id和@item [:id],但两者都不起作用。我收到错误undefined method 'id' for #<Sequel::Postgres::Dataset:0x007fac118b7120>
。从@item变量中检索值的正确方法是什么?
答案 0 :(得分:0)
实际上@item.id
是正确的方法。我能在代码中看到的唯一问题是
@item = items.filter(:id == params[:id])
应该是
@item = items.filter(:id => params[:id].to_i)
编辑:
试试这个:
@item = items.where(:id => params[:id].to_i)
@item.select(:id) #to embed
params [:id]给出一个字符串,因此将其转换为整数。
答案 1 :(得分:0)
@item = items.filter(:id => params[:id])
返回一个数据集。如果您想要单个项目,则应该执行:@item = items.first(:id => params[:id].to_i)
@item.id
也可能不想要你。鉴于items = DB[:items]
,您使用的是纯数据集,然后@item = items.first(:id => params[:id].to_i)
将为您提供哈希值。您需要@item[:id]
才能获得该项目的ID。
您可能希望改为使用模型:
# model file
class Item < Sequel::Model; end
# sinatra code
@item = Item[params[:id].to_i]
# template
@item.id