如何在Ruby中的视图文件中显示续集数据库连接的内容?

时间:2014-03-20 14:48:01

标签: ruby database postgresql sequel

我正在尝试使用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变量中检索值的正确方法是什么?

2 个答案:

答案 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