簡體   English   中英

Ruby on Rails表單助手

[英]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

<%= 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM