Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 控制器方法:联系人表单应根据表单的使用位置呈现不同的页面_Ruby On Rails_Ruby_Forms_Ruby On Rails 4_Controller - Fatal编程技术网

Ruby on rails 控制器方法:联系人表单应根据表单的使用位置呈现不同的页面

Ruby on rails 控制器方法:联系人表单应根据表单的使用位置呈现不同的页面,ruby-on-rails,ruby,forms,ruby-on-rails-4,controller,Ruby On Rails,Ruby,Forms,Ruby On Rails 4,Controller,我有一个专门用于此表单的特殊页面上的联系人表单。专用控制器包括: def new @message = Message.new end def create @message = Message.new(message_params) if @message.valid? MessageMailer.new_message(@message).deliver_now flash[:success] = "Thank you!" redirect_to con

我有一个专门用于此表单的特殊页面上的联系人表单。专用控制器包括:

def new
  @message = Message.new
end

def create
  @message = Message.new(message_params)
  if @message.valid?
    MessageMailer.new_message(@message).deliver_now
    flash[:success] = "Thank you!"
    redirect_to contact_path
  else
    render 'new'
  end
end
现在我还想把这个表格放在我的主页底部。我已将html添加到视图中,并将其控制器添加到主页中:

  def home
    @message = Message.new
  end
该表单现在也可以在主页上使用。但问题是:如果我在主页上提交表单,它会重定向到特殊联系人页面(因为
重定向到联系人路径
)。此外,如果出现错误,它会转到特殊联系人页面(因为
呈现“新建”

解决这个问题的最有效方法是什么?如果使用了表单,它会在主页上呈现表单(一直在底部)?当使用“特殊联系人”页面上的表单时,它当然仍应呈现该页面。我看到的唯一解决方案是编写独立的控制器方法,但这让它变得更加复杂。或者我是否可以使用
当前页面?
方法


更新:我尝试了
呈现当前页面?(联系路径)'新建“:“controllername/home”
但这会生成错误消息:
未定义的方法“当前页面?”

根据要求,主页上的表格:

<%= form_for @message, url: contact_path do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <%= f.text_field :name, placeholder: 'Name' %>
  <%= f.email_field :email, placeholder: 'Email' %>
  <%= f.text_area :content, placeholder: 'Your message…' %>
  <%= f.submit "Post message" %>
<% end %>

单独页面上的表格:

<%= form_for @message, url: contact_path do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <%= f.label :name %>
  <%= f.text_field :name, placeholder: 'Name', class: 'form-control' %>

  <%= f.label :email %>
  <%= f.email_field :email, placeholder: 'Email', class: 'form-control' %>

  <%= f.label :content %>
  <%= f.text_area :content, placeholder: 'Your message…', class: 'form-control' %>

  <%= f.submit "Send", class: "btn btn-primary" %>
<% end %>

您可以在Rails 4中使用名为
action\u name
的东西
action\u name
提供视图被触发的操作的名称。现在,您可以通过如下隐藏字段将此属性发送到方法
create

<%= hidden_field_tag "action_name", action_name %>


这行代码将
params[:action\u name]
发送到
create
方法中。然后,在
create
方法中,您可以检查请求来自何处,并采取适当的操作。

您可以在Rails 4中使用名为
action\u name
的方法
action\u name
提供视图被触发的操作的名称。现在,您可以通过如下隐藏字段将此属性发送到方法
create

<%= hidden_field_tag "action_name", action_name %>


这行代码将
params[:action\u name]
发送到
create
方法中。然后,在
create
方法中,您可以检查请求来自何处,并采取适当的措施。

您可以发布您的表单吗?我将表单代码添加到OPAre中,您要求在按下提交按钮后,如果表单是从主页提交的,则表单应再次驻留在主页上,如果它是从那个里提交的,它应该放在特别联系页面上?是的,就是这样。我基本上是在问如何最有效地做到这一点,所以不需要编写完全独立的控制器方法。可能使用类似于
当前页面?
的方法?您可以发布您的表单吗?我将表单代码添加到OPAre中,您要求在按下提交按钮后,如果表单是从主页提交的,则表单应再次驻留在主页上,如果表单是从主页提交的,则表单应驻留在特殊联系人页面上?是的,就是这样。我基本上是在问如何最有效地做到这一点,所以不需要编写完全独立的控制器方法。可能使用类似于
当前页面?
的方法?您可以发布您的表单吗?我将表单代码添加到OPAre中,您要求在按下提交按钮后,如果表单是从主页提交的,则表单应再次驻留在主页上,如果表单是从主页提交的,则表单应驻留在特殊联系人页面上?是的,就是这样。我基本上是在问如何最有效地做到这一点,所以不需要编写完全独立的控制器方法。也许可以使用类似于
current\u page?
method的方法?