运行 Rails 4.1.8 | Ruby 2.1.5p273
我尝试使用以下内容显示当前用户创建的备注的当前用户名:
show.html.erb中的 <%= "#{note.user.first_name.capitalize} #{note.user.last_name.capitalize[0]}" %>
。
<% @notes.each do |note| %>
<tr>
<td>
<h4>
<%= "#{note.user.first_name.capitalize} #{note.user.last_name.capitalize[0]}" %>
</h4>
<p><%= note.created_at.strftime("%-m/%-d/%y") %></p>
</td>
<td>
<p><%= h(note.comment).gsub(/\n/, '<br/>').html_safe %></p>
如果我使用<%= "#{note.user.first_name.capitalize} #{note.user.last_name.capitalize[0]}" %>
该应用就可以了。
我也检查了NotesController的注释,但我似乎无法找到问题。
class NotesController < ApplicationController
before_action :set_note, only: [:edit, :update, :destroy]
before_action :set_account
before_action :authenticate_user!
before_action :check_user, only: [:edit, :update, :destroy]
# GET /notes/new
def new
@note = Note.new
end
# GET /notes/1/edit
def edit
end
# POST /notes
# POST /notes.json
def create
@note = Note.new(note_params)
@note.user_id = current_user.id
@note.account_id = @account.id
respond_to do |format|
if @note.save
format.html { redirect_to @account, notice: 'note was successfully created.' }
format.json { render :show, status: :created, location: @note }
else
format.html { render :new }
format.json { render json: @note.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /notes/1
# PATCH/PUT /notes/1.json
def update
respond_to do |format|
if @note.update(note_params)
format.html { redirect_to account_path(@account), notice: 'note was successfully updated.' }
format.json { render :show, status: :ok, location: @note }
else
format.html { render :edit }
format.json { render json: @note.errors, status: :unprocessable_entity }
end
end
end
# DELETE /notes/1
# DELETE /notes/1.json
def destroy
@note.destroy
respond_to do |format|
format.html { redirect_to account_path(@account), notice: 'note was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_note
@note = note.find(params[:id])
end
def set_account
@account = Account.find(params[:account_id])
end
def check_user
unless (@note.user == current_user) || (current_user.admin?)
redirect_to root_url, alert: "Sorry, this note belongs to someone else"
end
end
# Never trust parameters from the scary internet, only allow the white list through.
def note_params
params.require(:note).permit(:comment)
end
end
我确定我失踪的东西很少,我只是看不到它。
答案 0 :(得分:1)
您有一个没有与之关联的用户的注释,或者其中一个注释用户没有first_name或last_name(如果您发布了错误消息,我们就知道了)。如果你想防止这种情况,你必须确保用户,first_name和last_name在调用方法之前不是nil:
在模型中:
def display_user_name
if user.nil?
"No user"
else
"#{user.first_name.present? ? user.first_name : '<missing>'} "\
"#{user.last_name.present? ? user.last_name.capitalize[0] : '<missing>'}"
end
end
在模板中:
<%= note.display_user_name %>
或者,你可以使用伟大的andand
宝石,然后在你的模板中你将拥有:
"#{note.user.andand.first_name.andand.capitalize} #{note.user.andand.last_name.andand.capitalize[0]}"
请注意它会返回&#34; &#34; (如果注释没有用户或没有名字且没有姓氏,则为其中包含空格的字符串)。
答案 1 :(得分:0)
试试这个:
在Note
类 app / models / note.rb 中:
def user_name
@user_name ||= user.present? ? "#{user.first_name.capitalize} #{user.last_name.capitalize[0]}" : "No user" # or Anonymous(whichever suites your requirement)
end
然后在你的show.html.erb:
<%= note.user_name %>
下面:
答案 2 :(得分:0)
我想出了这个问题。我有几个&#34;笔记&#34;有一些&#34; null&#34;数据库中的值,这就是它无法与current_user关联的原因。
删除具有空值的说明后,问题已得到纠正。