【问题标题】:Rails, X-Editable not passing correct params in AJAX callRails,X-Editable 未在 AJAX 调用中传递正确的参数
【发布时间】:2015-12-24 12:17:06
【问题描述】:

我已经看了 2 天了。我在 Rails 4.2.5 和 ruby​​ 2.1.7 中有一个应用程序。 我正在尝试使用 X-Editable 实现内联编辑。

我没有使用任何 gem,只是导入相关文件:

<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">

<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>

<!-- x-editable (bootstrap version) -->
<link href="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.4.6/bootstrap-  editable/css/bootstrap-editable.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.4.6/bootstrap-editable/js/bootstrap-editable.min.js"></script>

在我看来,我有:

<a href="#" class="editable bolbol editable-disabled" data-pk="1" id="amount" data-type="text" data-url="<%=crossingcost_path(crossingcost.id)%>" data-title="Enter Amount">
  <%= crossingcost.amount %>
</a>

我正在初始化

// make amount editable
$('.bolbol').editable({
});

到目前为止一切顺利,我可以访问弹出窗口来编辑我要编辑的值。

然后我收到一条错误消息:

ParameterMissing(参数缺失或值为空:crossingcost)

所以发送的参数哈希如下(来自日志):

参数:

{
  "name" => "amount",
  "value" => "166",
  "pk" => 1,
  "id" => "1"
}

而它可能会发送如下内容:

{
  :crossingcost => {
    "name" => "amount",
    "value" => "166",
    "pk" => 1,
    "id" => "1"
  }
}

关于如何发送正确的参数以便更新操作可以正常工作的任何想法?

EDIT1:添加控制器

# PATCH/PUT /crossingcosts/1
# PATCH/PUT /crossingcosts/1.json
def update

  respond_to do |format|
    if @crossingcost.update(crossingcost_params)
      format.html { redirect_to @crossingcost, notice: 'Crossingcost was successfully updated.' }
      format.json { render :show, status: :ok, location: @crossingcost }
    else
      format.html { render :edit }
      format.json { render json: @crossingcost.errors, status: :unprocessable_entity }
    end
  end
end



private
# Use callbacks to share common setup or constraints between actions.
def set_crossingcost
  @crossingcost = Crossingcost.find(params[:id])
end

def set_ticket
  @ticket = Ticket.find(params[:ticket_id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def crossingcost_params
  params.require(:crossingcost).permit(:ticket_id, :usermetum_id, :amount,:firm_id)
end

def crossingcost_params_nested
  params.require(:mynested_crossingcost).permit(:ticket_id, :usermetum_id, :amount,:firm_id)
end

【问题讨论】:

  • 你能添加你的控制器吗?
  • 添加了控制器,谢谢。我想我可以改变检查参数的方式。通过构建一个函数:defcrossingcost_params(new_params) new_params.permit(:ticket_id,usermetum_id,:amount,:firm_id) end。但这似乎有点骇人听闻……并且使用当前的哈希值,我将作为 new_params 传递

标签: ruby-on-rails x-editable


【解决方案1】:

首先,我建议您使用 Rails HTML Helpers,而不是将 ERB 包装到您的 HTML 标记中。看起来有点乱:

<%= link_to '#', class: 'editable bolbol editable-disabled', data: { pk: '1', type: 'text', url: crossingcost_path(crossingpost.id), title: 'Enter Amount' }, id: 'amount' do %>
  <%= crossingcost.amount %>
<% end %>

而不是

<a href="#" class="editable bolbol editable-disabled" data-pk="1" id="amount" data-type="text" data-url="<%=crossingcost_path(crossingcost.id)%>" data-title="Enter Amount">
  <%= crossingcost.amount %>
</a>

你的其他问题:

如果我理解正确,我认为解决此问题的最佳方法是直接允许参数而不是尝试嵌套它们。

例如:

def crossingcost_params
  params.permit(:name, :value, :pk, :id)
end

通过这种方式,您可以允许未嵌套的参数。

就像你的例子:

{
  "name" => "amount",
  "value" => "166",
  "pk" => 1,
  "id" => "1"
}

我认为应该也可以将此参数嵌套在X-editable 中。如果你想用这种方式解决问题,请查看Docs

希望这会有所帮助!

编码愉快:)

【讨论】:

  • 是的,为了解决我的问题,我必须允许参数没有嵌套,就像你的例子一样。感谢您的提醒,它确实以这种方式工作。如果 X-editable 允许发送嵌套参数会更自然,但它也可以像这样正常工作。
猜你喜欢
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2012-07-30
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多