我是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方法。
答案 0 :(得分:4)
form_for
要么是模型的实例,要么是表示包含模型实例的变量名称的符号。你已经给它起了一个控制器的名字。
使用此:
<%= form_for :message do |f| -%>
或thiS:
<%= form_for @message do |f| -%>
答案 1 :(得分:2)
既然你是新手,请让我为你解释一些事情:
-
<%= 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 %>