Whole source code here西納特拉:NoMethodError
我認爲有在程序流,它返回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
頁 - 根據自己的角色/權限,他們將看到「/ 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視圖,它們就可以正常工作。
也許問題在於,profile
不知道傳給它的上下文,所以這樣的反應。但沒有任何想法如何解決它。
我可以添加更多的代碼,如果你想要的。
在求和:
當@journal == nil
爲什麼<%[email protected] 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
檢查,如果日記是零。
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'是無 – fl00r
你在哪裏設置'@ journal',爲什麼你的應用程序文件中的第二個二位代碼? – thesecretmaster
@ fl00r是的,問題在於。並捕捉這個錯誤,我已經把'除非'塊。但它吐出錯誤,而不是爲'input'設置空白值。 也許'@ journal'實例沒有正確傳遞給用戶頁面。但我不知道我該如何修復它。 @ IsaiahZwick-Schachter我已經更新了這個問題。你想看到什麼? – marmeladze