Ruby on rails 存在5个表单元素,但只有4个保存到数据库中。轨道
我的数据库有问题。我可以将表单的所有元素保存到数据库中,但出于某种原因,它遗漏了“:captcha”:电子邮件、:first_name、:last_name和:user_消息均已保存,但:captcha未保存 HTML表单视图/pages/index.HTML.erb 路线 EDITED尝试了这段代码,但它没有保存4个元素,而是执行“else”语句并重定向,就好像根本没有保存一样 消息控制器Ruby on rails 存在5个表单元素,但只有4个保存到数据库中。轨道,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我的数据库有问题。我可以将表单的所有元素保存到数据库中,但出于某种原因,它遗漏了“:captcha”:电子邮件、:first_name、:last_name和:user_消息均已保存,但:captcha未保存 HTML表单视图/pages/index.HTML.erb 路线 EDITED尝试了这段代码,但它没有保存4个元素,而是执行“else”语句并重定向,就好像根本没有保存一样 消息控制器 class messages控制器
class messages控制器
从此处删除名称
属性:
<%= f.text_field :captcha, :required => true, :name => "captcha", :class => "message_input_default", :placeholder => " * #{@a} + #{@b} = ?" %><br><br>
将生成此html:
<input type="text" name="message[first_name]">
但您提供的自定义名称覆盖了默认行为,并生成如下请求:
{ captcha: 'captcha_val', message: { first_name: 'some_val1', last_name: 'some_val2', ... } }
然后从params
中提取消息params:
def message_params
params.
require(:message).
permit(:first_name, :last_name, :email, :user_message, :captcha)
end
最后,使用此哈希创建消息:
{ first_name: .., last_name: .., email: .., user_message: .. }
尝试
@message=message.create(message_params)
而不是messages\create
中的new
?我尝试了,它没有保存4个元素,而是执行“else”语句并重定向,就好像表单根本没有被保存一样。成功了!非常感谢您的快速响应和准确的回答!
Rails.application.routes.draw do
resources :pages
resources :messages
resources :admins
get '/' => 'pages#index'
get '/new' => 'messages#new'
post '/message_sent' => 'messages#create'
get '/message_sent' => 'messages#show'
end
class MessagesController < ApplicationController
def show
end
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
if params[:message][:captcha].to_i == session["sum"] && @message.save!
UserMailer.welcome_email(@message).deliver_now
redirect_to '/message_sent'
else
redirect_to '/'
end
end
private
def message_params
return params.require(:message).permit(:first_name, :last_name, :email, :user_message, :captcha)
end
end
<%= f.text_field :captcha, :required => true, :name => "captcha", :class => "message_input_default", :placeholder => " * #{@a} + #{@b} = ?" %><br><br>
<%= f.text_field :first_name %>
<input type="text" name="message[first_name]">
{ message: { first_name: 'value_of_input' } }
{ captcha: 'captcha_val', message: { first_name: 'some_val1', last_name: 'some_val2', ... } }
def message_params
params.
require(:message).
permit(:first_name, :last_name, :email, :user_message, :captcha)
end
{ first_name: .., last_name: .., email: .., user_message: .. }