【问题标题】:Sidebar Form -- No route matches [POST]侧边栏表单 - 没有路线匹配 [POST]
【发布时间】:2016-10-10 15:22:18
【问题描述】:

当我使用 URL 自行加载表单页面时,我有一个可以正常工作的联系表单。现在我重新设计了网站,表单现在在侧边栏中呈现,当我从侧边栏中点击提交按钮时出现发布错误。

现在,如果我使用 URL 加载表单页面,只要我停留在表单页面上,侧边栏就会工作,一旦我更改页面,当我更改页面时,侧边栏表单将再次抛出“没有路由匹配 [Post]”错误点击提交按钮。

任何帮助将不胜感激!

斯科特

Rails.application.routes.draw do

  root 'static_pages#index'


  get 'home'    => 'static_pages#index'

  get   'video'   => 'static_pages#video'

  get   'help'    => 'static_pages#help'

  get   'about'   => 'static_pages#about'

  get   'services'   => 'static_pages#services'

  get     'accordion' => 'static_pages#accordion'

  get   'social' => 'static_pages#social'

  get   '/messages' => 'messages#new'
  post  '/messages' => 'messages#create'



end

Messages_Controller

class MessagesController < ApplicationController

   def new
    @message = Message.new
   end

  def create
    @message = Message.new(message_params)

    if @message.valid?
      MessageMailer.new_message(@message).deliver
      flash[:notice] = "Your Messages Has Been Sent."
      redirect_to messages_path
    else
      flash[:alert] = "Please Fill in All of the Fields."
      render :new
    end

end

private

  def message_params
    params.require(:message).permit(:name, :email, :subject, :content)
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby forms routes


    【解决方案1】:

    我差不多想通了。

    我将表单包装在 form_tag 助手中,如下所示:

    <%= form_tag("messages", method: "post", :class => "my-styles") do %>
    ...my form here...
    <% end %>
    

    这解决了“No Routes Match POST 问题。

    然后为了在提交表单信息后停留在同一页面上,我将 MessagesController 修改为 redirect_to(:back) 如下:

    class MessagesController < ApplicationController
    
    
    def new
    @message = Message.new
    end
    
    
    def create
    @message = Message.new(message_params)
    
    if @message.valid?
      MessageMailer.new_message(@message).deliver
      flash[:notice] = "Your Messages Has Been Sent."
      redirect_to(:back)
    
    else
      flash[:alert] = "Please Fill in All of the Fields."
      redirect_to(:back)
    
    end
    
    end
    
    
    private
    
    def message_params
      params.require(:message).permit(:name, :email, :subject, :content)
    end
    
    end
    

    感谢 Stack Overflow 社区,因为我从这些页面中收集了几乎所有的东西来解决这个问题。

    谢谢大家,

    斯科特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多