所以目前我有一个link_to,登录的用户可以点击:
<%= link_to "Enroll", [@task.project, @task] %>
用户通过订阅与项目建立关联。要为具有项目的用户创建新订阅,我为它编写了一些简单的表单。
<%= form_for([@project, @subzz]) do |f| %>
<%= f.hidden_field :project_id, :value => @project.id %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
哪个工作正常并创建关联。但是,我希望用户能够在他点击“注册”而不是第二个额外提交按钮时创建订阅。
任何想法如何处理这个?我想过使用jQuery,但不知道如何用它来注入id以及它是否是“正确”的方式。
先谢谢大家!
编辑:
当使用张贴为答案的方法时,我得到:
param is missing or the value is empty: sub
我的更新表格:
<%= form_for([@project, @subzz], html: {role: "form", id: "project_form"}) do |f| %>
<%= hidden_field_tag :project_id, :value => @project.id %>
<%= hidden_field_tag :user_id, :value => current_user.id %>
<%= link_to "Enroll", [@task.project, @task], :onclick => "$('#project_form').submit() "%>
<% end %>
subs_controller.rb
class SubsController < ApplicationController
def create
@subz = Sub.create(sub_params)
project = @subz.project
redirect_to root_path
end
private
def sub_params
params.require(:sub).permit(:project_id, :user_id)
end
end
答案 0 :(得分:1)
您可以使用现有的表单和link_to,只需编辑一些像这样编辑dorm_tag
<%= form_for([@project, @subzz], html: {role: "form", id: "project_form"}) do |f| %>
并将按钮移除为这样的形式
<div class="actions">
<%= f.submit %>
</div>
并像这样编辑link_to
<%= link_to 'Enroll', "", :onclick => "$('#project_form').submit()" %>
它会起作用
<强>更新强>
您可以在没有表单的情况下实现此目的,注释掉此表单并编辑如下链接
<%= link_to 'Enroll', subs_path(project_id: @project.id, user_id: current_user.id), method: :post %>
和创建方法更新如下
def create
@subz = Sub.new(sub_params)
if @subz.save
flash[:success] = 'Sub was successfully submited.'
redirect_to root_path
else
flash[:danger] = 'Sub not submited'
redirect_to request.referer
end
end
更容易
或者如果您在表单之前保留,则表单中的链接和create
方法编辑如下
def create
@subz = Sub.new(sub_params)
if @subz.save
flash[:success] = 'Sub was successfully submited.'
redirect_to root_path
else
flash[:danger] = 'Sub not submited'
redirect_to request.referer
end
end
,表单将如下所示
<%= form_for([@project, @subzz], html: {role: "form", id: "project_form"}) do |f| %>
<%= hidden_field_tag :project_id, :value => @project.id %>
<%= hidden_field_tag :user_id, :value => current_user.id %>
<% end %>
<%= link_to "Enroll", [@task.project, @task], :onclick => "$('#project_form').submit() "%>
如果您对链接标记上的[@task.project, @task]
感到困惑,请使用直接链接
答案 1 :(得分:1)
所以我想出了以下解决方案:
我已经将子处理添加到application_controller中,因此它可用于project_controller。我还添加了项目,任务作为参考,以便我能够通过sub_controller而不是project_controller重定向到任务。
application_controller.rb
def create
@subs = Sub.new(sub_params)
project = @subs.project
taskz = project.tasks.first
if @subs.save
redirect_to [taskz.project, taskz]
end
end
private
def sub_params
params.require(:sub).permit(:project_id, :user_id)
end
在project_controller的show.html.erb中,我使用旧表单:
<%= form_for([@project, @subz] do |f| %>
<%= f.hidden_field :project_id, :value => @project.id %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.submit "Submitted" %>
<% end %>
工作正常。感谢以前的任何帮助!