消息控制器中未定义的方法`stringify_keys’
当我尝试提交表单时出现以下错误(当1个用户想要向另一个用户发送消息时,表单会显示)
NoMethodError in MessagesController#create undefined method `stringify_keys' for "":String Rails.root: /Users/fkhalid2008/loand Application Trace | Framework Trace | Full Trace app/controllers/messages_controller.rb:31:in `new' app/controllers/messages_controller.rb:31:in `create'
以下是消息控制器的相关代码:
def new @message = Message.new if params[:reply_to] @reply_to = @user.received_messages.find(params[:reply_to]) unless @reply_to.nil? @message.to = @reply_to.sender.login @message.subject = "Re: #{@reply_to.subject}" @message.body = "\n\n*Original message*\n\n #{@reply_to.body}" end end end def create @message = Message.new(params[:message]) @message.sender = @user @message.recipient = User.find_by_login(params[:message][:to]) if @message.save flash[:notice] = "Message sent" redirect_to user_messages_path(@user) else render :action => :new end end
我该如何解决?
更多支持代码如下:
消息>新视图(这是创建表单的位置)
messages_path(:user_id => @user) do |f| %>
消息模型
class Message < ActiveRecord::Base is_private_message attr_accessor :to end
用户模型
class User "Hmm, that email's already taken" validates_format_of :email, :with => /^([^\s]+)((?:[-a-z0-9]\.)[az]{2,})$/i, :message => "Hi! Please use a valid email" end
POSTS> INDEX VIEW(这是Form链接的地方)
I am a getting married in in , and looking for a . My budget is . Contact ago. <!--/. 'Are you sure?', :method => :delete %> -->
发展日志
Started POST "/messages" for 127.0.0.1 at Sun Apr 22 01:54:57 +0500 2012 Processing by MessagesController#create as HTML Parameters: {"name"=>"faisal", "commit"=>"Send Message", "authenticity_token"=>"Qyww9hP6jLmqpQ+ua21FAk9vePju8Gpq39Gpaflf3wE=", "utf8"=>"\342\234\223", "subject"=>"testing", "message"=>"hello", "email"=>"fas@fas.com"} User Load (0.1ms) SELECT "users".* FROM "users" LIMIT 1 Completed 500 Internal Server Error in 17ms NoMethodError (undefined method `stringify_keys' for "hello":String): app/controllers/messages_controller.rb:31:in `new' app/controllers/messages_controller.rb:31:in `create'
现在我明白了。 你以完全不一致的方式建立了你的forms:
<%= form_for @message, :url => messages_path(:user_id => @user) do |f| %>
然后:
是什么导致您的文本字段与消息无关的情况。 你看到最后一个标签中有没有提到message
?
解决方案很简单:使用助手。
而不是你的标记:
使用助手:
<%= f.label :name %> <%= f.text_field :name %>
并且你的字段将被正确命名(如message[name]
),你将进入你的控制器正确的params[:message]
。 当然,您可以手动制作,但练习表明这不是最好的决定。
对每个其他字段重复此步骤。
我猜想发生的事情是params[:message]
不是Rails所期望的哈希。 你应该遵循jdoe的建议并发布你的表格代码b / c我会怀疑它是不对的。
此外,您还可以在开发日志中查看您向应用发布的数据。 发布那个。 它看起来像:
Started POST "/message" for 127.0.0.1 at 2012-04-19 16:49:22 -0400 Processing by MessagesController#create as HTML Parameters: {"key"=>"value"}
“参数”是您想要查看的内容。
当你调用Message.new(params[:message])
, params[:message]
需要是一个带有消息属性的哈希。 在您的表单中,因此在日志文件中显示的post中, params[:message]
是一个字符串。
更改
至
或更好
<%= f.text_area :message, :rows => 9, :cols => 25, :class => "required max_len", :max_length => 1000 %>
但是 – 您的表单中会有很多其他错误,您很快就会遇到这些错误 – 例如,没有message[to]
参数,但您希望控制器中存在一个错误。 我建议阅读一些Rails教程,比如这篇 。