[英]Ruby on Rails form helper
我是Rails的新手,在嘗試找到對我真正有用的教程時遇到了一些麻煩。 我試圖在MySQL中創建一個數據庫,然后允許用戶通過表單向該數據庫提交信息。 我能夠使用下面的代碼創建一個表單,但是它僅觸發Controller中的新方法,而不觸發create方法。 有誰知道為什么會這樣和/或可以指導我學習構建表單的好教程。 我在Google中找到了一些內容,但是由於某種原因,當我嘗試輸入該語法時,該語法對我來說永遠不起作用。 非常感謝您提供的任何幫助。
控制器-
class MessageController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new
@message.message=params[:mess]
@message.user=params[:name]
if @message.save
redirect_to "http://itworks.com"
end
end
end
查看-
<%= form_for :MessageController do |f| -%>
Message: <%= f.text_field :mess %><br />
UserName: <%= f.text_field :name %><br />
<%= f.submit%>
<% end -%>
編輯-當我將:MessageController更改為@message或:message時,出現語法錯誤。 (語法錯誤,意外關鍵字確保,期望$ end。令人驚訝的是,該表單可與:MessageController一起使用,但它僅觸發新方法,而不觸發create方法。
form_for
需要一個模型實例,或者一個表示包含模型實例的變量名稱的符號。 您已為其指定了控制器的名稱。
用這個:
<%= form_for :message do |f| -%>
或這個:
<%= form_for @message do |f| -%>
由於您是新手,讓我為您解釋一些事情:
-
<%= form_for @message do |f| -%>
<%= f.label :mess %>
<%= f.text_field :mess %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
當使用form_for
,基本上需要使用ActiveRecord對象填充它。 當前,您正在使用MessageController
類,這是完全錯誤的。 您已經在控制器中設置了@message
對象-您只需要使用它填充form_for
方法
-
強大的參數
其次,正如我在另一個問題中已經提到的那樣,您需要確保正確使用了Rails strong params
功能:
#app/controllers/message_controller.rb
Class MessageController < ApplicationController
def create
@message = Message.new(message_params)
@message.save
end
private
def message_params
params.require(:message).permit(:mess, :user)
end
end
我對Rails還是很陌生,但是看起來您form_for方法的語法有點偏離。 這是Rails指南中針對表單助手的示例:
<%= form_for @article, url: {action: "create"}, html: {class: "nifty_form"} do |f| %>
<%= f.text_field :title %>
<%= f.text_area :body, size: "60x12" %>
<%= f.submit "Create" %>
<% end %>
這是表單幫助器頁面的鏈接: http : //guides.rubyonrails.org/form_helpers.html
我發現rubyonrails.org指南是解決問題的最佳資源。 該文檔實際上是非常好的(既詳盡又清晰)。
我想這可能是由“強參數”引起的,要了解更多信息,請參見此處的“ 強參數示例” 。
在Messages控制器中,我們可以向其中添加strong參數
class MessageController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
@message.message=params[:mess]
@message.user=params[:name]
if @message.save
redirect_to "http://itworks.com"
end
end
private
def message_params
params.require(:message).permit(:mess, :name)
end
end
因為您定義了@message
,所以..為什么不使用它?
<%= form_for @message do |f| %>
Message: <%= f.text_field :mess %><br />
UserName: <%= f.text_field :name %><br />
<%= f.submit%>
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.