Ruby on rails 如何在不加载任何页面的情况下传递输入数据(字符串)并保存?
Ruby on rails 如何在不加载任何页面的情况下传递输入数据(字符串)并保存?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,User有一个UserProfile,UserProfile有一个名为message 在这里,我想保存消息字段的输入数据,而不加载任何页面 正如您看到的我的视图,当我按下更新按钮时,它可以通过后台输入访问消息更新。 在控制器中,如何接收输入数据,并将其保存到用户配置文件表的消息列 我不知道如何在控制器中编码:( 我想我快到了:) 有人能告诉我怎么编码吗? 谢谢 控制器 def message_update current_user.save if request.xhr?
User
有一个UserProfile
,UserProfile
有一个名为message
在这里,我想保存消息
字段的输入数据,而不加载任何页面
正如您看到的我的视图,当我按下更新
按钮时,它可以通过后台输入访问消息更新
。在控制器中,如何接收输入数据,并将其保存到
用户配置文件
表的消息
列
我不知道如何在控制器中编码:(
我想我快到了:)
有人能告诉我怎么编码吗?
谢谢
控制器
def message_update
current_user.save
if request.xhr? # ajax request
respond_to do |format|
format.js {render :action=>"message_update.js"}
end
else
redirect_to users_path
end
end
查看
<%= form_for(current_user, :url => {:controller => "users", :action => "message_update" }, :remote => true, :class => 'form-search') do |f| %>
<%= f.fields_for :user_profile do |profile_form| %>
<div class="input-append">
<%= profile_form.text_field :message, :class => 'span6' %>
<button type="submit" class="btn">Update</button>
</div>
<% end %>
<% end %>
现在,这是路由错误:(
改变这个
get 'message_update' => 'users#message_update', :via => :put
到
改变这个
get 'message_update' => 'users#message_update', :via => :put
到
您正在将路由指定为get请求。请将其更改为:
匹配'message_update'=>'用户#message_update',:via=>:put
您正在将路由指定为get请求。将其更改为:
匹配'message_update'=>'用户#message_update',:via=>:put
将路由更改为
put 'message_update' => 'users#message_update'
解释
您正在尝试更新现有用户(因为它是当前用户),所以应该使用保留用于更新对象的HTTP PUT谓词。
在Rails 4中,您还可以编写
patch 'message_update' => 'users#message_update'
但它只是语法上的糖(put的别名)
另外,您的控制器中有一个错误。因为您只想保存一个字段值,所以我建议您编写
current_user.user_profile.update_attribute :message, params['user']['user_profile_attributes']['message']
将路由更改为
put 'message_update' => 'users#message_update'
解释
您正在尝试更新现有用户(因为它是当前用户),所以应该使用保留用于更新对象的HTTP PUT谓词。
在Rails 4中,您还可以编写
patch 'message_update' => 'users#message_update'
但它只是语法上的糖(put的别名)
另外,您的控制器中有一个错误。因为您只想保存一个字段值,所以我建议您编写
current_user.user_profile.update_attribute :message, params['user']['user_profile_attributes']['message']
谢谢,现在没有路由错误,但它仍然不会保存输入数据:(谢谢,现在没有路由错误,但它仍然不会保存输入数据:(谢谢,现在没有路由错误,但它仍然不会保存输入数据:(好的,我在输入字段
message
中键入“aaaaaa”并按下按钮。然后我再次加载页面。它显示默认字符串:(谢谢,现在没有路由错误,但它仍然不会保存输入数据:(好的,我在输入字段消息
中键入“aaaaaa”并按下按钮。然后我再次加载页面。它显示默认字符串:(它仍然不会保存输入数据:(我可能对params键有错误,但您可以在日志中看到它应该是什么。感谢它返回了这个错误NoMethodError(对于nil:NilClass,未定义的方法
[]):`log说这个“user”=>{“user\u profile\u attributes”=>{“message”=>“test”,“id”=>“1}
它使用了这个当前用户.user\u配置文件.update\u属性:message,params['user']['user\u profile\u attributes']['message']
!!!为什么不使用user\u配置文件???它仍然不会保存输入数据:(我可能对params键有错误,但您可以在日志中看到它应该是什么。感谢它返回了这个错误NoMethodError(对于nil:NilClass,未定义的方法是:`log说这个“user”=>{“user\u profile\u attributes”=>{“message”=>“test”,“id”=>“1”}
它使用了这个当前的user.user\u profile.update\u attribute:message,params['user']['user\u profile\u attributes']['message']
!为什么不使用user\u profile????