Динамические запросы с DataMapper

Я хотел бы иметь возможность делать динамические запросы с DataMapper для поиска в базе данных Sqlite для моего проекта Sinatra. Возможно ли это? До сих пор я придумал что-то вроде этого, пытаясь получить песни, которые поются от исполнителя, указанного в именованном параметре:

get '/artists/:name' do
@artist = Artist.get(params[:name])
@songs= Song.all(:artist_name => '#{artist.name}')
slim :show_artists
end

Это мои классы DataMapper:

configure:development do
    DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/3sbase.db")
    DataMapper.auto_migrate!
end

class Song
    include DataMapper::Resource
    property :id, Serial
    property :title, String
    property :year, Integer
    belongs_to :artist
end

class Artist
    include DataMapper::Resource
    #property :id, Serial
    property :name, String, :key=>true
    property :age, Integer
    has n, :songs
end




DataMapper.finalize

а это мой .slim файл

/show_artists.slim

h1= @artist.name
p Age: #{@artist.age}

- if @songs.any?
    ul#songs
      [email protected] do |song|
        p <a href="/songs/#{song.id}">#{song.title} </a>
- else
  p There are no songs from this artist/band in the database.

Каждый раз, когда оператор if возвращает false, я получаю сообщение «В базе данных нет песен этого исполнителя/группы». сообщение, несмотря на то, что в моей базе данных есть песни в исполнении исполнителя, которого я ищу.


person magmike    schedule 04.11.2013    source источник
comment
После запроса в группе sinatrarb google мне предложили заменить @songs= Song.all(:artist_name =› '#{artist.name}') на эту строку: @songs= Song .all(:artist =› {:name =› @artist.name}) Итак, проблема решена, хотя я пока не уверен, почему это должно быть написано именно так.   -  person magmike    schedule 05.11.2013


Ответы (1)


После запроса в группе sinatrarb google мне предложили изменить

@songs= Song.all(:artist_name => '#{artist.name}') 

с этой строкой:

@songs= Song.all(:artist => {:name => @artist.name})

или с этим

@songs= @artist.songs

они оба работают нормально

person magmike    schedule 14.11.2013