我正在開發一個專案,目標是發布一個字串并回傳該字串的每三個字符。該專案是用 Ruby/Rails 構建的。
我有(hacky)邏輯來取出第三個元素,將它放入一個新字串中,并將這個新字串與資料庫中的新物件一起保存,但我目前的問題是所有這些邏輯都完成了在控制器中。我真的很想跟隨 MVC,所以我的目標是將所有這些邏輯都放入模型中。
目前,我的 Controller 中的*params和create方法如下所示:
Class TestController < ApplicationController
...
def create
new_output_string = params[:input_string].split("")
final_output_string_array = []
counter = 1
new_output_string.each do |letter|
if counter % 3 == 0
final_output_string_array.append(letter)
end
counter = counter 1
end
final_output_string = final_output_string_array.join("")
@test = Test.create(
input_string: params[:input_string],
output_string: final_output_string
)
render json: @test
end
def test_params
params.require(:test).permit(:input_string, :output_string)
end
所以你可以看到操作這些資料的所有邏輯都在Controller中。我嘗試在模型中撰寫一個方法make_output_string:
Class Test < ApplicationRecord
def self.make_output_string()
new_output_string = params[:input_string].split("")
final_output_string_array = []
counter = 1
new_output_string.each do |letter|
if counter % 3 == 0
final_output_string_array.append(letter)
end
counter = counter 1
end
@final_output_string = final_output_string_array.join("")
end
我希望這將在create操作(我嘗試使用before_create等)呼叫之前操縱資料before_create,并在控制器的 create 方法中參考該方法,但我要么沒有結果,要么出現undefined method錯誤。
如何將我的邏輯移動到模型中,以便它可以處理引數的操作/創建?
uj5u.com熱心網友回復:
您應該在模型上為 input_string 創建一個自定義設定器,并使其同時保存 input_string 和 output_string。
Class Test < ApplicationRecord
def input_string=(input_string)
super(input_string)
self.output_string = generate_output(input_string)
end
private
def generate_output(input_string)
new_output_string = input_string.split("")
final_output_string_array = []
counter = 1
new_output_string.each do |letter|
if counter % 3 == 0
final_output_string_array.append(letter)
end
counter = counter 1
end
final_output_string_array.join("")
end
end
那么您的控制器將如下所示。
Class TestController < ApplicationController
def create
@test = Test.create(input_string: params[:input_string])
render json: @test
end
def test_params
params.require(:test).permit(:input_string, :output_string)
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471107.html
上一篇:在`_main'中:nil的未定義方法`run':NilClass(NoMethodError)
下一篇:Rails:在表單上為我的collection_select下拉選單設定默認值時使用selected=>。但是當我編輯該專案時,它會默認回傳
