2016-04-22 40 views
0

我是一個真正的試圖建立一個小應用程序的rails初學者。所以我得到了軌道4.2.5和設計我的用戶認證。我爲用戶模型添加了兩個額外的字段(用戶名,城市)。一切正常。更新通過jQuery部分形式設計用戶字段

我在應用程序的頂部獲得了一個部分,通過點擊每個頁面上的按鈕使用jQuery打開該部分。這部分應該包含一個輸入字段,用戶可以在其中編輯他的城市(通過AJAX?)。提交後,應更改城市並重新加載頁面。

現在我不知道如何實現這一點,以及要走的路。我只需要一個小指南,幫助我完成這件事!因爲默認設計不會生成控制器,也不會使用正常的路徑,所以我在使用rails方面的經驗讓我有些迷失。

非常感謝您提前! :)

+0

您可以顯示目前爲止的部分代碼嗎?僅當用戶登錄時才顯示?此外,代碼工作正常 - 你如何更新用戶名,城市? – Anand

回答

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 %> 

現在工作正常:)我知道,我需要添加更好的保存響應,但那只是爲了調試!

1

有2個解決方案,在這裏,有或沒有定製設計控制器將工作做好:

解決方案#1:自定義色器件控制器

  1. 配置路線:

    routes.rb

    devise_for :users, controllers: { registrations: 'registrations' } 
    
    devise_scope :user do 
    post "https://stackoverflow.com/users/:id/update_city" => "registrations#update_city" 
    end 
    
  2. 創建根據控制器,其從色器件控制器繼承:

    應用程序/控制器/ 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 
    
  3. 在情況下返回的javascript,您的視圖將是:

app/views/registrations/update_city.js.erb

<!-- Your javascript here --> 

解決方案2:創建一個新的控制器,不在乎設計

  1. 配置路線:

devise_scope:用戶做 郵報「/用戶/: id/update_city「=>」custom_registrations#update_city end

  1. 根據控制器創建

    app/controllers/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 
    
  2. 在情況下返回的javascript,您的視圖將是:

    應用/視圖/ custom_registrations/update_city.js.erb

    <!-- Your javascript here --> 
    

2溶液是如同樣,但在如何定製設計方面不同,解決方案#2不要觸摸設計默認控制器,但會有2個控制器相關的t o更新用戶的東西。取決於你的系統,這些只是我的建議!歡迎任何評論。

+0

多好的回答!這正是我需要走得更遠。我會先嚐試你的第二個解決方案,然後我會給你反饋!再次感謝隊友! – FNGR

+0

Hi @ hieu-pham!我試過你的第一個解決方案現在我發現了以下錯誤與我的形式: '未定義的方法'user_path」爲#<#<類別:0x007fcc97933af8>:0x007fcc91d6bd60>' 我的形式部分看起來像這樣: ''

<%= simple_form_for @user, remote: true do |f| %> <%= f.input :city, placeholder: 'Deine Stadt' %> <%= f.button :submit %> <% end %>

嘿 – FNGR

+0

,只需添加網址選項的形式,它會像'simple_form_for @user,remote:true,url:user_update_city_path(@user)' –