2017-10-05 156 views
0

我在數據庫中有以下表格,也有爲它創建的模型。導軌更新操作不起作用

|id |name |description |created_date   |updated_date  | 
----------------------------------------------------------------------- 
|1 |HELLO |greeting |2017-09-28 18:51:51 |2017-09-28 18:51:51| 

model.rb

class Person < ApplicationRecord 
    has_many :person_activities 
    validates :name, uniqueness: true 
end 

我想在控制器創建update行動。它將根據傳遞的名稱更新名稱和描述。例如,我想更新名稱HELLOHI。我如何爲此創建更新操作?

我試着按照控制器update行動,但它不會打update行動

def update 
    byebug 
    redirect_to Person.find(name: params[:id]).tap { |person| 
     person.update!(person_params) 
    } 
    end 

    private 

    def person_params 
    params.require(:person).permit(:name) 
    end 

的routes.rb

resources :person, only: [:index, :show, :create, :update, :destroy], defaults: { format: :json } 

試圖測試這樣http://localhost:1111/person/HELLO和身體PARAMS通過{ name: 'HI'}。我正在使用郵遞員進行測試。

+0

你需要添加'配置/路由條目.rb' - 通常通過'PUT' HTTP請求類型完成更新,因此通過在地址欄中輸入URL(僅發送GET請求)將無法訪問它。您需要使用像Postman這樣的HTTP客戶端來測試它,或者編寫一個HTML表單。請參閱http://guides.rubyonrails.org/form_helpers.html –

+0

我在route.rb中添加了條目。我正在使用郵遞員,請參閱末尾的行 –

+0

您是否將postman中的HTTP方法設置爲PUT? –

回答

-1

從郵遞員您需要先呼叫登錄操作。所以它會在郵遞員中創建一個會話,然後你可以調用更新操作。

0

您可以修改你的模型,這樣的事情:

class Person< ActiveRecord::Base 

    before_save :change_name 

    private 

    def change_name 
     self.name="HI" if self.name=="HELLO" 
    end 
end 
0

要正確地回答這個問題,我們需要了解如何與名稱創建一個新的記錄的邏輯=「HELLO」需要被設置爲「HI」。你有這個邏輯的查詢表嗎?還是硬編碼?

我能想到的最簡單的事情是,您可以在更新之前通過設置參數的值來更改傳遞參數的值。例如。

params["name"] = "HI" 

因此,當你做一個person.update它將使用「名稱」參數設置爲「你好」。

然後,你可以做到這一點的

def update 
    respond_to do |format| 
    params["name"] = "HI" 
    if @person.update(person_params) 
     format.html { redirect_to @person, notice: 'Person was successfully updated.' } 
     format.json { head :no_content } 
    else 
     format.html { render action: 'edit' } 
     format.json { render json: @person.errors, status: :unprocessable_entity } 
    end 
    end 
end 

你也可以做的更新則只需設置更新後的值:

def update 
    respond_to do |format| 
    if @person.update(person_params) 
     @person.name = "HI" 
     @person.save 
     format.html { redirect_to @person, notice: 'Person was successfully updated.' } 
     format.json { head :no_content } 
    else 
     format.html { render action: 'edit' } 
     format.json { render json: @person.errors, status: :unprocessable_entity } 
    end 
    end 
end