Sinatra App在链接中不使用Erb

时间:2014-03-08 20:18:53

标签: ruby sinatra erb

我遇到的问题是,当Sinatra应用程序在某些特定的超链接环境中使用时,它似乎并不总是显示我的ERB。我不知道为这个问题显示多少是相关的,所以我会尽我所能。基本上,我在我的Sinatra应用程序中有一个名为book_show.erb的文件。它有以下几行:

<p><a href="/books/#{@book.id}/edit">Edit Book</a></p>

但是,当在浏览器中呈现该链接时,它会链接如下:

http://localhost:9292/books/#{@book.id}/edit

#{@book.id}未替换为实际ID值。有一个@book对象,我确实在同一个文件的其他上下文中使用它。例如:

<h1><%= @book.series %></h2>
<h2><%= @book.title %></h2>

<h3>Timeframe:</h3>
<p><%= @book.timeframe %></p>

我甚至不知道我的路线是否会对此有所影响,但我的书功能的所有相关路线都是:

get '/books' do
  @title = 'Book Database'
  @books = Book.all
  erb :books
end

get '/books/new' do
  @book = Book.new
  erb :book_add
end

get '/books/:id' do
  @book = Book.get(params[:id])
  erb :book_show
end

post '/books' do
  book = Book.create(params[:book])
  redirect to("/books/#{book.id}")
end

我不知道还有什么可以帮助诊断这个问题。我希望有人看到一些我非常遗憾的非常明显的东西。

将书籍添加到数据库中工作得很好;它只是我无法正常工作的编辑链接 - 这似乎是纯HTML / ERB。为了测试它,我还在页面中添加了这一行:

<p>Testing: <%= "/books/#{@book.id}/edit" %>

返回并返回此文:

Testing: /books/4/edit

所以我知道ID正在存储。它必须与超链接有关,但我在Sinatra上找不到任何有用的东西,对此有所帮助。

1 个答案:

答案 0 :(得分:4)

ERB模板的行为不像ruby字符串 - 您需要明确告诉它将“模板”部分退出到“逻辑”部分。在属性方面看起来很奇怪:

<p><a href="/books/<%= @book.id %>/edit">Edit Book</a></p>

您可以使用link_to助手让它看起来更好:

link_to('Edit Book', controller: 'books', action: 'edit', id: @book.id)