我遇到的问题是,当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上找不到任何有用的东西,对此有所帮助。
答案 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)