我的控制器
class MessagesController < ApplicationController
def index
@messages = Message.all
end
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
if @message.save
redirect_to '/messages'
else
render 'new'
end
end
private
def message_params
params.require(:message).permit(:content)
end
end
我對應的觀點
<div class="create">
<div class="container">
<%= form_for(@message) do |f| %>
<div class="field">
<%= f.label :message %><br>
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Create" %>
</div>
<% end %>
</div>
</div>
對于 Rails 物件創建的幕后作業,我有點困惑。目前正在做 Codecademy 教程,但他們跳過了幾個解釋步驟。
當表單提交按鈕被按下時是否會
f.submit在 POST 請求中生成一個 JSON 物件?在路由到訊息控制器的創建操作之后。@message.save 如何知道是否保存成功?它不只是一個由此時傳入的引數填充的物件嗎?它是否在控制器之前先路由到資料庫?
uj5u.com熱心網友回復:
您可以在 Rails 服務器日志中查看表單提交所提交的內容。只需rails server在終端中運行,打開您的本地主機,提交表單并立即檢查終端中吐出的內容。你可能會得到這樣的東西:
Started POST "/messages" for ::1 at 2021-10-25 11:41:33 0200
Processing by MessagesController#create as HTML Parameters: {"message"=>"text", "content"=>"hey"}
[here you will see the SQL run to INSERT new data into the database]
Completed 201 Created in 1ms (ActiveRecord: 2.0ms | Allocations: 2073)
將其分解,您將獲得 5 條資訊。
- 帶有時間戳的請求型別和端點
- 使用的控制器和格式
- JSON 中的引數
- SQL 查詢運行(如果有)
- 回應狀態以及回應中使用的部件的基準、查詢花費的時間、渲染花費的時間等。
saverails 中的方法將嘗試將初始化模型的實體保存到資料庫中,并根據操作的結果回傳 true 或 false。save!如果操作失敗,還有一種方法會引發錯誤,而不是簡單地回傳 false 布林值。所以具體回答你的問題:
- JSON 物件在您的 POST 請求的引數中發送,基于 HTML 表單生成。
- @message 是由 params 填充的物件(在您的情況下,它只是實際使用的內容引數)。使用
save它會提示 ActiveRecord 連接到資料庫并執行 INSERT 操作,將其保存到資料庫中。 - 它不會首先路由到資料庫,控制器控制根據請求執行的操作。如果有什么東西訪問了資料庫,你將不得不提示它,就像你使用 save 方法所做的那樣。
rails 檔案中的保存方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/338827.html
標籤:红宝石轨道
