gpt4 book ai didi

ruby-on-rails - 帮助程序中的 Rails Form block - 我如何包含 "Protect from forgery"

转载 作者:行者123 更新时间:2023-12-02 14:28:34 25 4
gpt4 key购买 nike

我正在尝试为我的液体主题语言构建一个表单 block 。我的方法基于 this answer 。然而答案似乎不完整。

问题在于防伪和其他一些方法不可用。导致错误:

Liquid error: undefined method `protect_against_forgery?' for #

这是我的代码:

   class LiquidFormTag < Liquid::Block

include ActionView::Context
include ActionView::Helpers::FormHelper

def initialize(tag_name, markup, tokens)

super
end

def render(context)
form_tag("#") do

super
end
end
end

Liquid::Template.register_tag('liquid_form', LiquidFormTag)

有人知道我如何在此类中添加 protect_against_forgery 方法吗?

编辑:这是错误输出: enter image description here

编辑2:

这是我的 Liquid 代码的相关部分:

{% ticket_form %}
{% for offer in event.offers %}

<div class="well well-sm">
<div class="row">
<div class="col-xs-3 col-sm-5 col-md-6 col-lg-7">
<h5>{{offer.name}}</h5>
</div>
<div class="col-xs-9 col-sm-7 col-md-6 col-lg-5 pull-right">
<div class="input-group">
<span class="input-group-addon">{{offer.price}}</span>
<input type="email" class="form-control tickets-count" cols="2" id="exampleInputEmail1" placeholder="0">
<span class="input-group-btn">
<button type="button" class="btn btn-default"><i class="fa fa-plus"></i></button>
<button type="button" class="btn btn-default"><i class="fa fa-minus"></i></button>
</span>
</div>
</div>
</div>
</div>

{% endfor %}
{% endticket_form %}

最佳答案

我同意罗德里戈的观点,但很难确定将委托(delegate)给 Controller 的方法名称。

这就是为什么我更喜欢扩展 Liquid::Block 类并在响应时将缺少的方法委托(delegate)给 Controller 。

class LiquidFormTag < Liquid::Block
include ActionView::Context
include ActionView::Helpers::FormHelper

attr_reader :controller

def initialize(tag_name, markup, tokens)
super
end

def render(context)
@controller = context.registers[:controller]
form_tag('#') do
super(context).html_safe
end
end

end


Liquid::Block.class_eval do
# This delegates missing - including private & protected - methods (like protect_against_forgery?) to controller.
def method_missing(*args)
begin
if controller.respond_to?(args.first, true)
controller.send(args.first)
else
super
end
rescue
super
end
end
end

关于ruby-on-rails - 帮助程序中的 Rails Form block - 我如何包含 "Protect from forgery",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24715490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com