【发布时间】:2014-10-26 04:17:41
【问题描述】:
我正在尝试从表单中传递隐藏字段,该表单的值源自用户可以在网页上编辑的文本 blob。 (我使用 bootstrap-editable 让用户通过点击来编辑简介)
这是实际的工作流程:
- 用户进入“邀请页面”,他们会收到一个表单以输入朋友的电子邮件并显示将在电子邮件中使用的默认文本
- 如果用户愿意,他们可以单击文本并进行编辑。这将通过 javascript 对 Invitation 控制器中的 update_email 方法进行 post 调用
- 文本更新后,用户会被重定向返回,因此现在用户会看到带有更新文本的同一页面。 这行得通,用户会看到更新的文本简介而不是默认的 [1-3] 可以发生任意次数
- 当用户提交表单时,我希望得到最终版本的电子邮件,我可以将其保存在数据库中,并触发向用户朋友发送电子邮件邀请
问题: 我不断从表单参数中获取默认文本。知道我做错了什么吗?
这是表单(它的haml而不是html)
#new-form
= form_for @invitation, :url=> invitations_path(), :html => {:class => 'form-inline', :role => 'form'} do |f|
.form-group
= f.text_field :email, :type=> 'email', :placeholder=> 'Invite your friends via email', :class=> 'form-control invitation-email'
= f.hidden_field :mail_text, :value => @invitation_email
= f.submit :class => 'btn btn-primary submit-email', :value => 'Send'
这是邀请控制器:
class InvitationsController < ApplicationController
authorize_resource
before_filter :load_invitations, only: [:new, :index]
before_filter :new_invitation, only: [:new, :index]
before_filter :default_email, only: [:index]
#helper_method :default_email
def create
Invitation.create!(email: params[:invitation][:email], invited_by: current_user.id, state: 'sent', mail_text: params[:invitation][:mail_text], url: {referrer_name: current_user.name}.to_param)
redirect_to :back
end
def update_email
@invitation_email = params[:value]
flash[:updated_invitation_email] = params[:value]
redirect_to :back
end
private
def invitation_params
params.require(:invitation).permit!
end
def load_invitations
@invitations ||= current_user.sent_invitations
end
def new_invitation
@invitation = Invitation.new
end
def default_email
default_text = "default text"
@invitation_email = flash[:updated_invitation_email].blank? ? default_text : flash[:updated_invitation_email]
end
end
【问题讨论】:
-
我认为您的流程是错误的,如果用户可以编辑邮件文本,那么它为什么会隐藏在表单中?如果它是可见的,您就不必发送 ajax 请求来更新您的隐藏字段。
-
谢谢曼迪普。用户可以像 jsfiddle.net/NfPcH/32 这样编辑文本表单。这会将 ajax 发布请求发送到 update_email 。一旦用户对编辑电子邮件文本感到满意,他们就可以在下面的文本框中输入朋友的电子邮件并点击提交。对于此提交,我将“更新”电子邮件文本作为隐藏参数传递。让我知道工作流程是否清晰,我会尝试更好地描述它
-
啊,我看到它是一个 div 而不是一个文本字段。您可以在提交更改
@invitation_email的 ajax 请求时发布您的日志吗?更新invitation_email 变量后是否再次呈现表单?
标签: ruby-on-rails ruby forms activerecord form-for