Ruby Rails 模态表单提交到错误的数据库
Ruby on Rails modal form submitting to wrong DB
我在 searches/show 页面上有一个模式:
<button name="button" type="button">
<a class="nav-link" data-toggle="modal" data-target="#emailFriendModal" href="">Email Results to Friend</span></a>
</button>
单击时,模态框会正确显示这部分内容(为简洁起见,大部分代码已编辑):
<div class="modal fade" id="emailFriendModal">
...
<div class="mx-auto text-left column">
<%=form_with id: :friend_email_form, url: friend_emails_create_path do |f|%>
...
<%= recaptcha_tags %>
<div class="actions">
<%= f.submit "Send Email", class: 'btn btn-primary', "onclick":"submit_form();", "data-dismiss":"modal"%>
</div>
<script>
function submit_form() {
document.getElementById('friend_email_form').submit();
}
</script>
<%end%>
</div>
但是在提交时,对象没有发送到friend_emails控制器:
class FriendEmailsController < ApplicationController
def new
@friend_email = FriendEmail.new
end
def create
@friend_email = FriendEmail.new(message: params[:message], email: params[:email], email2: params[:email2], path: params[:path])
if @friend_email.save
redirect_back fallback_location: root_path, notice: "Your email has been sent"
else
redirect_back fallback_location: root_path, notice: "Sorry, something went wrong, please try again"
end
end
def friend_email_params
params.require(:friend_email).permit(:message,:email,:email2,:path)
end
end
单击 "Email a Friend" 按钮时,会弹出正确的部分,但是当提交表单时,会创建一个 Tour 对象(不是 Friend_email 对象!!)。显示旅游消息,发送旅游电子邮件。提交时,信息完全绕过 Friend_emails 控制器并直接进入 Tour 控制器。
路线:
post "friend_emails/create"
post "tours/create"
佣金路线:
friend_emails_create POST /friend_emails/create(.:format) friend_emails#create
tours_create POST /tours/create(.:format) tours#create
Tours Controller 以防有帮助:
class ToursController < ApplicationController
def index
@tours = Tour.all
end
def new
@tour = Tour.new
end
def create
@tour = Tour.new(day: params[:day], time: params[:time], user_id: params[:user_id], listing_id: params[:listing_id], school_id: params[:school_id],
email: params[:email])
if @tour.save
redirect_back fallback_location: root_url, notice: "Your tour request has been sent; we will be in touch soon with confirmation."
else
redirect_back fallback_location: root_url, notice: "#{@tour.errors.full_messages}"
end
end
def destroy
@tour = Tour.find(params[:id])
@tour.destroy
redirect_back fallback_location: root_url, notice: "Your Tour has been Cancelled"
end
def tour_params
params.require(:tour).permit(:tour_req, :user_id, :listing_id, :school_id, :email, :day, :time)
end
end
最后,这是包含部分内容的应用程序布局的摘录。
<%= yield %>
<% unless user_signed_in? %>
<%= render partial: 'devise/registrations/new' %>
<%= render partial: 'devise/sessions/new' %>
<% end %>
<%= render partial: 'friend_emails/new'%>
<%= render partial: 'tours/new'%>
我想通了。我在应用程序布局中有两个模式,并且代码引用了相同的 javacript submit() 函数。解决方法是像这样更改 submit() 函数的名称:
<div class="actions">
<%= f.submit "Send Email", class: 'btn btn-primary', "onclick":"submit_form2();", "data-dismiss":"modal"%>
</div>
<script>
function submit_form2() {
document.getElementById('friend_email_form').submit();
}
</script>
现在我们有两个 javascript 函数,submit_form() 和 submit_form2(),一切正常。
我在 searches/show 页面上有一个模式:
<button name="button" type="button">
<a class="nav-link" data-toggle="modal" data-target="#emailFriendModal" href="">Email Results to Friend</span></a>
</button>
单击时,模态框会正确显示这部分内容(为简洁起见,大部分代码已编辑):
<div class="modal fade" id="emailFriendModal">
...
<div class="mx-auto text-left column">
<%=form_with id: :friend_email_form, url: friend_emails_create_path do |f|%>
...
<%= recaptcha_tags %>
<div class="actions">
<%= f.submit "Send Email", class: 'btn btn-primary', "onclick":"submit_form();", "data-dismiss":"modal"%>
</div>
<script>
function submit_form() {
document.getElementById('friend_email_form').submit();
}
</script>
<%end%>
</div>
但是在提交时,对象没有发送到friend_emails控制器:
class FriendEmailsController < ApplicationController
def new
@friend_email = FriendEmail.new
end
def create
@friend_email = FriendEmail.new(message: params[:message], email: params[:email], email2: params[:email2], path: params[:path])
if @friend_email.save
redirect_back fallback_location: root_path, notice: "Your email has been sent"
else
redirect_back fallback_location: root_path, notice: "Sorry, something went wrong, please try again"
end
end
def friend_email_params
params.require(:friend_email).permit(:message,:email,:email2,:path)
end
end
单击 "Email a Friend" 按钮时,会弹出正确的部分,但是当提交表单时,会创建一个 Tour 对象(不是 Friend_email 对象!!)。显示旅游消息,发送旅游电子邮件。提交时,信息完全绕过 Friend_emails 控制器并直接进入 Tour 控制器。
路线:
post "friend_emails/create"
post "tours/create"
佣金路线:
friend_emails_create POST /friend_emails/create(.:format) friend_emails#create
tours_create POST /tours/create(.:format) tours#create
Tours Controller 以防有帮助:
class ToursController < ApplicationController
def index
@tours = Tour.all
end
def new
@tour = Tour.new
end
def create
@tour = Tour.new(day: params[:day], time: params[:time], user_id: params[:user_id], listing_id: params[:listing_id], school_id: params[:school_id],
email: params[:email])
if @tour.save
redirect_back fallback_location: root_url, notice: "Your tour request has been sent; we will be in touch soon with confirmation."
else
redirect_back fallback_location: root_url, notice: "#{@tour.errors.full_messages}"
end
end
def destroy
@tour = Tour.find(params[:id])
@tour.destroy
redirect_back fallback_location: root_url, notice: "Your Tour has been Cancelled"
end
def tour_params
params.require(:tour).permit(:tour_req, :user_id, :listing_id, :school_id, :email, :day, :time)
end
end
最后,这是包含部分内容的应用程序布局的摘录。
<%= yield %>
<% unless user_signed_in? %>
<%= render partial: 'devise/registrations/new' %>
<%= render partial: 'devise/sessions/new' %>
<% end %>
<%= render partial: 'friend_emails/new'%>
<%= render partial: 'tours/new'%>
我想通了。我在应用程序布局中有两个模式,并且代码引用了相同的 javacript submit() 函数。解决方法是像这样更改 submit() 函数的名称:
<div class="actions">
<%= f.submit "Send Email", class: 'btn btn-primary', "onclick":"submit_form2();", "data-dismiss":"modal"%>
</div>
<script>
function submit_form2() {
document.getElementById('friend_email_form').submit();
}
</script>
现在我们有两个 javascript 函数,submit_form() 和 submit_form2(),一切正常。