Ruby on Rails形成帮助器

时间:2014-06-27 23:55:16

标签: mysql ruby-on-rails ruby

我是Rails的新手,并且在尝试找到对我有用的教程时遇到了一些麻烦。我试图在MySQL中创建一个数据库,然后允许用户通过表单向这个数据库提交信息。我能够使用下面的代码创建一个表单,但它只触发Controller中的新方法而不是create方法。有谁知道为什么会这样,和/或可以指导我建立表格的好教程。我在谷歌找到了一些但由于某些原因,当我尝试输入时,语法对我来说无效。非常感谢您提供任何帮助。

控制器 -

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方法。

4 个答案:

答案 0 :(得分:4)

form_for要么是模型的实例,要么是表示包含模型实例的变量名称的符号。你已经给它起了一个控制器的名字。

使用此:

<%= form_for :message do |f| -%>

或thiS:

<%= form_for @message do |f| -%>

答案 1 :(得分:2)

既然你是新手,请让我为你解释一些事情:

-

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方法

-

强大的参数

其次,正如我在other question中提到的,您需要确保正确使用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

答案 2 :(得分:0)

我对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指南是解决问题的最佳资源。文档实际上非常好(广泛而且清晰)。

答案 3 :(得分:-1)

我想这可能是由&#34;强参数&#34;引起的, 要了解更多信息,您可以在此处查看Strong Parameters by Example

在Messages控制器中,我们可以向其添加强参数

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