我是一个真正的铁杆初学者试图建立一个小应用程序。所以我得到了rails 4.2.5和Devise for User认证。我已经为用户模型添加了两个额外的字段(用户名,城市)。一切正常。
我在我的应用程序顶部得到了一个部分,通过单击每个页面上的按钮以jquery打开。这个部分应该包括一个输入字段,用户可以在其中编辑他的城市(通过AJAX?)。提交后,应更改城市并重新加载页面。
现在我不确定如何实现这一目标,以及将要采取的方法。我只需要一个小指南,帮助我完成这项工作!因为默认情况下设计并不会生成控制器并且不使用正常路径,所以我在轨道上的经验很少,我有点失落。
非常感谢您提前! :)
答案 0 :(得分:1)
这里有2种解决方案,无论是否有自定义设备控制器都能正常工作:
解决方案#1:自定义设计控制器
配置路线:
<强>的routes.rb 强>
devise_for :users, controllers: { registrations: 'registrations' }
devise_scope :user do
post "/users/:id/update_city" => "registrations#update_city"
end
根据从设计控制器继承的控制器创建:
应用/控制器/ registrations_controller.rb 强>
class RegistrationsController < Devise::RegistrationsController
def update_city
# Do your stuff
# return json here, if return javascript, go to step #3
end
end
如果返回javascript,您的观点将是:
应用/视图/注册/ update_city.js.erb 强>
<!-- Your javascript here -->
解决方案#2:创建一个新的控制器,不关心设计
devise_scope:用户做 发布“/ users /:id / update_city”=&gt; “custom_registrations#update_city 端
根据控制器创建
应用/控制器/ custom_registrations_controller.rb 强>
class CustomRegistrationsController < ApplicationController
before_action :authenticate_user!
def update_city
# Do your stuff
# return json here, if return javascript, go to step #3
end
end
如果返回javascript,您的观点将是:
应用/视图/ custom_registrations / update_city.js.erb 强>
<!-- Your javascript here -->
答案 1 :(得分:0)
所以,非常感谢Hieu Pham!我想出了如何让它与你的步骤一起工作。但我不得不稍微修改它们,但现在它正在工作:)所以,这里是为了其他想知道的人:
<强>的routes.rb 强>
devise_scope :user do
patch "update/:id", to: "registrations#update_city", as: "update_city"
end
<强> registrations_controller.rb 强>
class RegistrationsController < Devise::RegistrationsController
def update_city
@user = current_user
if @user.update_attributes(user_params)
respond_to do |format|
format.js {render inline: "location.reload();" }
end
else
flash.now[:error] = "Could not save client"
end
end
private
def user_params
params.require(:user).permit(:city)
end
end
我的表单部分
<%= simple_form_for @user, url: update_city_path(@user), remote: true do |f| %>
<%= f.input :city, placeholder: t('.yourcity') %>
<%= f.button :submit, t('.submit') %>
<% end %>
现在它工作得很好:)我知道,我需要在保存时添加更好的响应,但那只是为了调试!