从 sinatra 中的下拉框传递值 & ruby
Passing value from a dropdown box in sinatra & ruby
无论出于何种原因,sinatra 似乎都无法识别 "code" 我使用的是我的 get "/library" 我尝试将其放入字符串中但无济于事。去掉引号使它们成为未初始化的方法。非常感谢您的帮助!
require 'sinatra'
require 'sinatra/reloader'
require 'data_mapper'
enable :sessions
DataMapper.setup(:default, "sqlite://#{Dir.pwd}/project3.db")
class Code
include DataMapper::Resource
property :id, Serial
property :language, String
property :purpose, String
property :code_snippet, Text
end
DataMapper.auto_upgrade!
get "/snippet" do
erb :snippet, layout: :project3_template
end
post "/snippet" do
Code.create params
redirect to ("/library")
end
get "/library" do
@html = Code.all(language: HTML)
@css = Code.all(language: CSS)
@javascript = Code.all(language: Javascript)
@ruby = Code.all(language: Ruby)
erb :library, layout: :project3_template
end
get "/library/:id" do
@code = Code.get :id
erb :code_id, layout: :project3_template
end
我的 erb 页面
<h1>Code Library</h1>
<h2>HTML</h2>
<%= @html.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
<h2>CSS</h2>
<%= @css.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
<h2>Javascript</h2>
<%= @javascript.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
<h2>Ruby</h2>
<%= @ruby.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
尝试通过这样的视图
erb :project3_template
其中 project3_template 在您的视图文件夹中 project3_template.erb
您的@class 变量应该在视图中可见,您可以像下面那样传递常规变量,此示例中的 :name
是客户端通过 GET 或 [=34 传递的内容=], 这些都存在于 params 数组中。您也可以传递整个参数数组。
erb :project3_template, :locals => {:name => params[:name]}
见https://github.com/sinatra/sinatra#accessing-variables-in-templates
您的观点存在一个严重问题:使用 <%%>
和 <%=variable%>
<%%>
用于嵌入Ruby必须执行的代码
<%=variable%>
用于嵌入变量的内容。
在您的情况下,您需要执行以下操作
<%@html.each do |code|%>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%end%>
无论出于何种原因,sinatra 似乎都无法识别 "code" 我使用的是我的 get "/library" 我尝试将其放入字符串中但无济于事。去掉引号使它们成为未初始化的方法。非常感谢您的帮助!
require 'sinatra'
require 'sinatra/reloader'
require 'data_mapper'
enable :sessions
DataMapper.setup(:default, "sqlite://#{Dir.pwd}/project3.db")
class Code
include DataMapper::Resource
property :id, Serial
property :language, String
property :purpose, String
property :code_snippet, Text
end
DataMapper.auto_upgrade!
get "/snippet" do
erb :snippet, layout: :project3_template
end
post "/snippet" do
Code.create params
redirect to ("/library")
end
get "/library" do
@html = Code.all(language: HTML)
@css = Code.all(language: CSS)
@javascript = Code.all(language: Javascript)
@ruby = Code.all(language: Ruby)
erb :library, layout: :project3_template
end
get "/library/:id" do
@code = Code.get :id
erb :code_id, layout: :project3_template
end
我的 erb 页面
<h1>Code Library</h1>
<h2>HTML</h2>
<%= @html.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
<h2>CSS</h2>
<%= @css.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
<h2>Javascript</h2>
<%= @javascript.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
<h2>Ruby</h2>
<%= @ruby.each do |code| %>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%= end %>
尝试通过这样的视图
erb :project3_template
其中 project3_template 在您的视图文件夹中 project3_template.erb
您的@class 变量应该在视图中可见,您可以像下面那样传递常规变量,此示例中的 :name
是客户端通过 GET 或 [=34 传递的内容=], 这些都存在于 params 数组中。您也可以传递整个参数数组。
erb :project3_template, :locals => {:name => params[:name]}
见https://github.com/sinatra/sinatra#accessing-variables-in-templates
您的观点存在一个严重问题:使用 <%%>
和 <%=variable%>
<%%>
用于嵌入Ruby必须执行的代码
<%=variable%>
用于嵌入变量的内容。
在您的情况下,您需要执行以下操作
<%@html.each do |code|%>
<a href="/library/<%= code.id %>"><%= code.purpose %></a>
<hr>
<%end%>