【问题标题】:Sinatra App Not Using Erb in LinksSinatra 应用程序未在链接中使用 Erb
【发布时间】:2014-03-08 20:18:53
【问题描述】:

我遇到的问题是 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 上找不到任何有用的信息。

【问题讨论】:

标签: ruby sinatra erb


【解决方案1】:

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)

【讨论】:

  • link_to 助手来自 Rails,在 Sinatra 中不可用(除非您自己编写)。
  • 谢谢你。你的改变成功了。我很好奇为什么这个链接文件似乎可以工作,我根据自己的逻辑建模:github.com/spbooks/SINATRA1/blob/master/chapter06/views/…
  • @JeffNyman 该页面使用的是Slim,而不是 ERB,并且 Slim 确实使用 Ruby 插值之类的语法。
  • @matt 啊!谢谢你。我确实意识到 Slim 与 ERB 的区别,但我没有意识到这会如何影响其他事情。仅此一项就可以解释为什么我在使用一些 Sinatra 教程时遇到了很多问题。 (有些使用 HAML,有些使用 ERB,有些使用 Slim。)
猜你喜欢
  • 2023-03-11
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 2014-10-12
  • 2018-09-20
相关资源
最近更新 更多