User
has_one UserProfile
,UserProfile
有一列名为message
在这里,我想保存message
字段的输入数据而不加载任何页面。
当您看到我的查看时,按message_update
按钮后,可以通过后台访问Update
。
在控制器中,如何接收输入数据,并将其保存到message
表的user_profile
列?
我不知道如何在控制器中编码:(
我想我差不多了:) 谁能告诉我如何编码呢? 谢谢!
Contorller
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
现在,这是路由错误:(
ActionController::RoutingError (No route matches [PUT] "/message_update"):
答案 0 :(得分:1)
将路线更改为
put 'message_update' => 'users#message_update'
解释
您尝试更新现有用户(因为它是current_user),因此您应该使用为更新对象而保留的HTTP PUT谓词。 在Rails 4中你也可以写
patch 'message_update' => 'users#message_update'
但它只是语法糖(put的别名)
此外,您的控制器出错。由于您只想保存一个字段值,我建议您编写
current_user.user_profile.update_attribute :message, params['user']['user_profile_attributes']['message']
答案 1 :(得分:0)
更改此
get 'message_update' => 'users#message_update', :via => :put
到
match 'message_update' => 'users#message_update', :via => :put
答案 2 :(得分:0)
您将路线指定为获取请求。将其更改为:
match 'message_update' => 'users#message_update', :via => :put