导轨更新操作不起作用
问题描述:
我在数据库中有以下表格,也有为它创建的模型。导轨更新操作不起作用
|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
行动。它将根据传递的名称更新名称和描述。例如,我想更新名称HELLO至HI。我如何为此创建更新操作?
我试着按照控制器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'}
。我正在使用邮递员进行测试。
答
从邮递员您需要先呼叫登录操作。所以它会在邮递员中创建一个会话,然后你可以调用更新操作。
答
您可以修改你的模型,这样的事情:
class Person< ActiveRecord::Base
before_save :change_name
private
def change_name
self.name="HI" if self.name=="HELLO"
end
end
答
要正确地回答这个问题,我们需要了解如何与名称创建一个新的记录的逻辑=“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
你需要添加'配置/路由条目.rb' - 通常通过'PUT' HTTP请求类型完成更新,因此通过在地址栏中输入URL(仅发送GET请求)将无法访问它。您需要使用像Postman这样的HTTP客户端来测试它,或者编写一个HTML表单。请参阅http://guides.rubyonrails.org/form_helpers.html –
我在route.rb中添加了条目。我正在使用邮递员,请参阅末尾的行 –
您是否将postman中的HTTP方法设置为PUT? –