Ruby on rails Simple验证意外命名错误的长度
我有一个消息表单,它在模型中使用validates_length_限制消息的长度Ruby on rails Simple验证意外命名错误的长度,ruby-on-rails,validation,model,controller,Ruby On Rails,Validation,Model,Controller,我有一个消息表单,它在模型中使用validates_length_限制消息的长度 validates_length_of :content, :maximum => 1024 我通过输入5个左右的字符来“测试”这一点,并提交了表格。但我得到了这个命名法: NoMethodError in Messages#create Showing app/views/messages/_messages.html.erb where line #1 raised: You have a ni
validates_length_of :content, :maximum => 1024
我通过输入5个左右的字符来“测试”这一点,并提交了表格。但我得到了这个命名法:
NoMethodError in Messages#create
Showing app/views/messages/_messages.html.erb where line #1 raised:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Extracted source (around line #1):
1: <%- for message in @messages -%>
2: <div class="message">
3: <%= link_to message.title, message %>
....
消息#创建:
_messages.html.erb:(非常难看,需要进行重大重构)
通过
活跃的 ;
'messages',:action=>show',:id=>message%>
'messages',:action=>show',:id=>message%>
%w(嵌入img对象p参数),
:attributes=>%w(allowfullscreen allowscriptaccess href name src type value)%%>
message.firstcomments%>
= 4 -%>
'显示',:id=>message%>
我不确定这里到底发生了什么。任何帮助都将不胜感激(即使是部分重构)。感谢阅读我的问题。您好,当您输入5k左右的字符时,
消息
将成为无效记录,因此请创建已工作的否则
条件
else
format.html { render :action => "index" }
end
您在这里渲染render
不会在操作中执行代码,它只是在创建操作(我想您也没有在new
中执行该操作)中使用您未分配的@messages
当前数据渲染文本文件,因此在渲染索引时它是nil
您应该在new
或create
中初始化它,或将render'index'
更改为render'new'
您在哪里声明@messages变量?那就是引起争议的那个nil@messages在消息#索引中。我更新了这个问题以显示代码。谢谢,我不知道为什么它被改为索引。
def create
@message = Message.new(params[:message])
respond_to do |format|
if @message.save
record_post_time
flash[:notice] = "Created \"#{@message.title}\""
format.html { redirect_to(messages_url) }
else
format.html { render :action => "index" }
end
end
end
<%- for message in @messages -%>
<div class="message">
<%= link_to message.title, message %>
<%- if message.name.empty? -%>
<%- else -%>
<span class="name">
by
<%- if message.email.blank? -%>
<%=h message.name %>
<%- else -%>
<a href="mailto:<%= message.email %>"><%=h message.name %></a>
<%- end -%>
</span>
<%- end -%>
<span class="time">
active  <%= timeago(message.updated_at) %>
</span>
<%- if message.comments.empty? -%>
<span class="reply">
<%= link_to 'reply', :controller => 'messages', :action => 'show', :id => message %>
</span>
<% else %>
<span class="reply">
<%= link_to pluralize(message.comments.count, 'reply'), :controller => 'messages', :action => 'show', :id => message %>
</span>
<%- end -%>
<p><%= sanitize message.content,
:tags => %w(a embed img object p param),
:attributes => %w(allowfullscreen allowscriptaccess href name src type value) %></p>
<% unless controller.controller_name == "tags" %>
<%- unless message.tag_list.nil? || message.tag_list.empty? -%>
<% message.tags.each do |t| %>
<div class="tag"><%= link_to t.name.titleize, tag_path(t) %></div>
<% end %>
<%- end -%>
<% end %>
<%- unless message.comments.empty? -%>
<div class="comments">
<%= render :partial => message.firstcomments %>
<%- if message.comments.count >= 4 -%>
<%= link_to 'more...', :action => 'show', :id => message %>
<%- end -%>
</div>
<%- end -%>
</div>
<%- end -%>
else
format.html { render :action => "index" }
end