如何使用静态页面控制器不同地使用联系表单模型?

时间:2017-07-18 16:50:18

标签: ruby-on-rails ruby forms

我有一个静态PagesController和一个ProjectRequestsController,如下所示。很基本的。 ProjectRequestsController充当简单的联系表单。

我希望能够确定是否已经从一个页面或另一个页面提交了project_request表单,例如,当每个project_request记录设置为truefalse属性时持续存在。

例如:如果表格是从家中提交的,请设置home = true等等......

我尝试在页面下嵌套项目请求资源,但由于我的网页没有任何ID,因此无法正常工作。

我考虑过将hidden_field值从表单传递给我的控制器,但如果我应该走这条路,我就不知道如何继续或事件。

实现这一目标的最佳途径是什么?

PagesController

class PagesController < ApplicationController

  def home
  end

  # Landing pages
  def landing_one
    render 'pages/landings/landing_one/landing_home'
  end

  def landing_two
    render 'pages/landings/landing_two/landing_home'
  end  
  .... 
end

ProjectRequests表:

create_table "project_requests", force: :cascade do |t|
    t.string "name"
    t.string "last_name"
    t.string "email"
    t.string "title"
    t.boolean "home", default: false
    t.boolean "landing_one", default: false
    t.boolean "landing_two", default: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

EDITED 添加ProjectRequestsController片段。 现在,它看起来像这样。我在一个模态渲染表单。,逃避JS。 因此,我的new操作绑定到我的new.js.erb,通过该@new_project我的空shell class ProjectRequestsController < ApplicationController skip_before_action :authenticate_user!, only: [ :new, :create ] before_action :set_project, only: [:edit] def new @new_project = ProjectRequest.new end def create @new_project = ProjectRequest.new project_requests_params respond_to do |format| if @new_project.save format.html { redirect_to root_path } format.js flash[:notice] = t('controllers.projects.success') AdminNotificationMailer.new_project_notification(@new_project).deliver else format.html { render 'edit' } format.js flash[:alert] = t('controllers.projects.fail') end end end def edit end private def project_requests_params params.require(:project_request).permit(:name, :email, :description, :travel, :home) end def set_project @project = ProjectRequest.find(params[:id]) end end

{{1}}

2 个答案:

答案 0 :(得分:0)

你快到了。

首先在动作中设置关于表格来源的标志

def home
  @new_project = ProjectRequest.new(home: true)
end

如果表单在主页上呈现,我们设置home: true

现在,在您的表单中,为每个着陆页标志使用隐藏变量

<%= form_for @new_project do |f| %>
  <%= f.hidden_field :home %>
  <%= f.hidden_field :landing_one %>
  <%= f.hidden_field :landing_two %>
  ....and your other fields....
<% end %>

当您提交表单并在create操作中传递参数时,它会自动设置页面标记。

答案 1 :(得分:0)

得到解决方案,

我只是创建了以下帮助器,并在我的create ProjectRequestsController方法中使用了它。

referrer允许我获取new_project_request_path的祖先URL,从而获得正在使用的PagesController方法。

  def set_new_project_instance
    project = @new_project
    if request.referrer.include? ‘home’
      project.landing_one = true
    elsif request.referrer.include? ‘travel’
      project.landing_two = true
    end
    project.save
  end