- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
#Error Text NoMethodError a-6ren">
我觉得我的程序流程有逻辑错误,返回NoMethodError
首先,一段导致错误的代码。
<input id="#identity" type="number" name="journal[identity]" value="<%= @journal.identity unless @journal.identity.nil? %>" />
#Error Text
NoMethodError at /profile
undefined method `identity' for nil:NilClass
file: journal_form.erb location: block in singleton class line: 2
输入标签内的代码正是错误文本中描述的代码片段。
我的程序流程就是这样。
/profile
页1 没问题。用户可以毫无问题地登录和注销。对于第二步,代码就是这样
#profile.erb
<% if session[:user].role == 1 %>
<%= erb :assign_doctor %>
<% elsif session[:user].role == 2 %>
<%= erb :journal_form %>
<% elsif session[:user].role == 3 %>
<pre>
Silence!
</pre>
<% elsif session[:user].role == 4 %>
<%= erb :doctor_screen %>
<% end %>
第二种情况下的“journal_form.erb”文件。
<input id="#identity" type="number" name="journal[identity]"
value="<%= @journal.identity unless @journal.identity.nil? %>" />
.... # some other attributes like that.
<% if session[:user].role == 1 %>
<% if journal.viewed == false %>
<input id="#assigned_doctor" type = "text" name="journal[assigned_doctor]" />
<% else %>
<input id="#assigned_doctor" type = "text" name="journal[assigned_doctor]" value="<%= @journal.assigned_doctor unless @journal.assigned_doctor.nil? %>" />
<% end %>
我还为 journal
创建了 CRUD 资源模型条目(在其他文件中)。并且不会产生对 profile
的 CRUD View 他们工作正常。
也许问题是,profile
不知道传递给它的上下文,所以它会这样响应。但是不知道如何解决它。
如果你愿意,我可以添加更多代码。
总结:
当 @journal == nil
为什么 <%=@journal.identity unless @journal.identity.nil?%>
返回 undefined method 'identity' for nil:NilClass
?
下面有一些有用的资源:
在 user.rb 中(包含 3 个类/模型)与 main.rb 在同一目录中。
# model declerations end here
DataMapper.finalize
module JournalHelpers
def find_journals
@journals = Journal.all
end
def find_journal
Journal.get(params[:id])
end
def create_journal
@journal = Journal.create(params[:journal])
end
end
helpers JournalHelpers
get '/journals' do
find_journals
erb :journals
end
#new
get '/journals/new' do
#protected!
@journal = Journal.new
erb :new_journal
end
#show
get '/journals/:id' do
@journal = find_journal
erb :show_journal
end
#create
post '/journals' do
#protected!
flash[:notice]= "Journal was succesfull posted" if create_journal
redirect to("/journals/#{@journal.id}")
end
#edit
get '/journals/:id/edit' do
#protected!
@journal = find_journal
erb :edit_journal
end
#put/update
put '/journals/:id' do
#protected!
journal = find_journal
if journal.update(params[:journal])
flash[:notice] = "Journal successfully updated"
end
redirect to("/journals/#{journal.id}")
end
程序结构
├── assets
│ ├── css
│ │ ├── application.css
│ │ ├── jquery-ui.min.css
│ │ └── main.css
│ ├── images
│ │ ├── loader.gif
│ │ └── nurse_shshsh.jpeg
│ └── js
│ ├── application.js
│ ├── jquery.min.js
│ └── jquery-ui.min.js
├── main.rb
├── user.rb
├── users.db
└── views
├── about.erb
├── assign_doctor.erb
├── contact.erb
├── doctor_screen.erb
├── edit_journal.erb
├── home.erb
├── journal_form.erb
├── journals.erb
├── layout.erb
├── leftcolumn.erb
├── login.erb
├── nav.erb
├── new_journal.erb
├── notifications.erb
├── profile.erb
└── show_journal.erb
检查日志是否为 nil。
get '/profile' do
if !authorized?
redirect to('/login')
else
puts "nihil" if @journal.nil?
erb :profile
end
end
服务器日志
127.0.0.1 - - [29/Jun/2015:22:35:33 +0500] "GET /profile HTTP/1.1" 302 - 0.0029
127.0.0.1 - - [29/Jun/2015:22:35:33 +0500] "GET /login HTTP/1.1" 200 212 0.0024
127.0.0.1 - - [29/Jun/2015:22:35:42 +0500] "POST /login HTTP/1.1" 303 - 0.0167
nihil
127.0.0.1 - - [29/Jun/2015:22:35:43 +0500] "GET /profile HTTP/1.1" 200 1047 0.0106
@journal 为零。
最佳答案
在我看来,您的代码依赖于存在 @journal
字段集这一事实。 (这到底是谁的日记?)它肯定不是在 main.rb
中设置的。您应该在 get '/profile'
block 中获取所需的数据。类似的东西:
get '/profile' do
if !authorized?
redirect to('/login')
else
@journal = Journal.get(params[:id])
erb :profile
end
end
有多种方法可以做到这一点。通常最好避免调用之间的任何共享状态,而是在每个特定请求中获取所有需要的数据。 (数据仍然可以像在您的 JournalHelper 模块中一样被重用。)如果数据库访问成为瓶颈,最好的前进方式通常是在数据库或 Web 服务器前面引入缓存。
关于ruby - Sinatra:NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110271/
您在 Sinatra 应用程序中使用什么验证码? 我喜欢 Google 的 http://www.google.com/recaptcha ,但似乎不适用于 Sinatra(不过有一个 Rails 插
如何从命令行将 Sinatra 应用作为守护程序运行? 它正在使用瘦: ruby app.rb -p 3000 -e production 我不喜欢在 app.rb 本身中设置它。我想从命令行取消它。
我正在使用 Sinatra 在 Ruby 中编写一个小型 Web 服务。使用 http 基本身份验证(在生产中通过 https)控制对几乎所有内容的访问。 我想从要求授权中排除一个特定的目录。是否有捷
我曾经能够在启动 sinatra 应用程序的窗口中看到为 sinatra 发出的 http 请求。 我认为在 sinatra 升级后我再也看不到它们了,我不知道如何做到这一点。我不需要将它们记录到文件
带有 activerecord gem 的 Sinatra 项目发出警告: DEPRECATION WARNING: Currently, Active Record suppresses error
我正在玩 Sinatra,我想让我的一条路线不区分大小写。我尝试添加这样的路线: get "(?i)/tileflood/?" do end 但它与预期的/tileflood 的任何排列都不匹配。我在
如果我没有在 Sinatra 中明确设置 session 过期时间,那么默认的过期时间是多少? 最佳答案 Sinatra session 来自 Rack::Session;所以开箱即用它默认为不过期。
似乎没有关于如何使用 Sinatra 中的 Rack::Protection 为表单启用 CSRF 保护的文档。有人做过这个吗?我似乎不知道如何告诉 Sinatra 启用此功能。 最佳答案 Sinat
假设我有一条 Sinatra 路线: put '/data' do request.body.read # ... end 看起来整个 request.body 都被读入内存了。有没有办法在主
我正在 Sinatra 中运行一个经典风格的应用程序,我想获取该应用程序绑定(bind)到的 URL。例如,如果我在开发环境中启动它,我希望得到:http://localhost:4567/,而在生产
我正在尝试在我的 Mac 上安装以下 ruby gem: http://www.sinatrarb.com/intro.html 我收到以下消息: michael-rosarios-mac
我最近更新到了 Ruby 1.9.2 (RVM)、Sinatra 1.1 和 Passenger 3.0.0。我有一个简单的应用程序,由以下部分组成: # config.ru require 'rub
似乎没有关于如何使用 Sinatra 中的 Rack::Protection 为表单启用 CSRF 保护的文档。有人做过这个吗?我似乎不知道如何告诉 Sinatra 启用此功能。 最佳答案 Sinat
与 sinatra 应用程序相比,Rack 应用程序有哪些优势? 谢谢 最佳答案 我认为提问者想要将它保留在 Rack 上的优点。 考虑到 Sinatra 已经是典型 Web 应用程序的极薄和简约的贴
我最近创建了一个带有登录表单(无基本身份验证)的 Sinatra 应用程序。为了防止在用户登录之前访问该应用程序,我在适当的位置放置了一个 before block before do unles
我如何设置 Sinatra 以便公用文件夹中的静态文件与响应 Access-Control-Allow-Origin = "*"一起返回? 最佳答案 在这里查看这个问题:Sinatra OPTIONS
我有一个基于 Sinatra 的 REST 服务应用程序,我想从其中一个路由中调用其中一个资源,从而有效地将一个资源与另一个资源组合在一起。例如 get '/someresource' do ot
我有一个使用经典 Sinatra 的旧项目(不是模块化 我在互联网上能找到的唯一使用 Puma 的示例是使用模块化 Sinatra。 引用:http://www.sinatrarb.com/intro
问题是默认处理程序是在 中定义的。 Sinatra::ShowExceptions ,由 控制:raise_errors 配置设置,这个设置是全有或全无。如果 :raise_errors 关闭然后 错
我有以下 Sinatra 应用程序,我正在测试 error阻止但它似乎不起作用。 这是我的 sinatra 应用程序: require 'rubygems' require 'sinatra' err
我是一名优秀的程序员,十分优秀!