Ruby on rails 存在5个表单元素,但只有4个保存到数据库中。轨道

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控制器

我的数据库有问题。我可以将表单的所有元素保存到数据库中,但出于某种原因,它遗漏了“:captcha”:电子邮件、:first_name、:last_name和:user_消息均已保存,但:captcha未保存

HTML表单视图/pages/index.HTML.erb

路线

EDITED尝试了这段代码,但它没有保存4个元素,而是执行“else”语句并重定向,就好像根本没有保存一样

消息控制器

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: .. }