Ruby on rails 如何不同地使用带有静态页面控制器的联系人表单模型?
我有一个静态Ruby on rails 如何不同地使用带有静态页面控制器的联系人表单模型?,ruby-on-rails,ruby,forms,Ruby On Rails,Ruby,Forms,我有一个静态PagesController和一个ProjectRequestsController,如下所示。非常基本。ProjectRequestsController充当一个简单的联系表单 我希望能够识别项目申请表是否已提交,无论是从一个页面还是另一个页面提交,例如,在保存时,将每个项目申请记录的属性设置为true或false 例如:如果表单是从主页提交的,请设置home=true,等等 我尝试将项目请求资源嵌套在页面下,但不起作用,因为我的页面没有任何ID 我想把hidden_字段的值从表
PagesController
和一个ProjectRequestsController
,如下所示。非常基本。ProjectRequestsController
充当一个简单的联系表单
我希望能够识别项目申请表是否已提交,无论是从一个页面还是另一个页面提交,例如,在保存时,将每个项目申请记录的属性设置为true
或false
例如:如果表单是从主页提交的,请设置home=true
,等等
我尝试将项目请求资源嵌套在页面下,但不起作用,因为我的页面没有任何ID
我想把hidden_字段
的值从表单传递给我的控制器,但不知道如果我要这样做,该如何进行或处理
实现这一目标的最佳方式是什么
页面控制器
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
已编辑
添加ProjectRequestsController代码段。
现在看来是这样的。我以模态的形式呈现,escape JS。
因此,我的new
操作绑定到我的new.js.erb
,我正在通过它传递我的空shell@new\u项目
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
class ProjectRequestsController
你就快到了
首先,在操作本身中设置有关窗体源的标志
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
操作中传递参数时,它会自动设置页面标志。得到解决方案
我只是创建了以下帮助程序,并在我的create
ProjectRequestsController
方法中使用了它
referer
允许我获取新项目请求路径的祖先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
谢谢阿米特,确认我的想法。然而,我确实意识到,在
PagesController
中实例化@new_project在这里是无用的,因为它来自ProjectRequestsController
中的new
方法。因此,它在此控制器中实例化一次,我无法将不同的project_请求的新实例传递到我的表单中。请您也添加ProjectRequestsController
的片段,好吗?马上。刚刚贴出来。基本上,基于每个PagesController
操作,我应该能够传递一个不同的ProjectRequest
实例变量,其属性对应于该页面的操作。
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