rails如何从表单提交生成对象?



My Controller

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教程,但他们跳过了几个解释步骤。

  1. 当表单提交按钮被按下时,是否生成f.submit一个JSON对象在POST请求?

  2. 在被路由到消息控制器的创建操作之后。@message。保存是否保存成功?它不就是一个由传入的参数填充的对象吗?它是否在控制器之前先路由到DB ?

您可以在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条信息。

  1. 带有时间戳的请求和端点类型
  2. 使用的控制器和格式
  3. JSON中的参数
  4. SQL查询运行
  5. 响应状态,包含响应中使用的部件的基准,查询花费的时间,渲染花费的时间等。

save方法从rails将尝试保存一个初始化模型的实例到数据库中,并将返回true或false取决于动作的结果。还有一个save!方法,如果操作失败,它将引发一个错误,而不是简单地返回假布尔值。所以具体地回答你的问题:

  1. JSON对象在POST请求的参数中发送,基于HTML表单生成。
  2. @message是一个由params填充的对象(在您的例子中,它只是实际使用的内容参数)。使用save将提示ActiveRecord连接到数据库并执行INSERT操作,将其保存到数据库中。
  3. 它不首先路由到DB,控制器根据请求控制执行的操作。如果有东西碰到数据库,你必须提示它,就像你用save方法做的那样。

rails文档中的save方法

相关内容

  • 没有找到相关文章

最新更新