我有一个静态PagesController
和一个ProjectRequestsController
,如下所示。很基本的。 ProjectRequestsController
充当简单的联系表单。
我希望能够确定是否已经从一个页面或另一个页面提交了project_request表单,例如,当每个project_request记录设置为true
或false
属性时持续存在。
例如:如果表格是从家中提交的,请设置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}}
答案 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