如何将 JavaScript GetElementById 字符串值传递给 Rails?

How to pass JavaScript GetElementById string value to Rails?

我有一种方法可以将 Product class 中的不同字符串从英语翻译成另一种语言。它有两个变量:字符串和语言。对于第一个,我希望获得文本区域的当前值。这是它在 JS 中的样子:

var primary_value = document.getElementById('primary_body_html_value').getElementsByClassName('note-editable')[0].innerText;

然后我想在JS函数中使用这个方法:

var translated_string = "<%= GoogleTranslator.translate(primary_value, 'de') %>"

主要问题是如何在'translated_string'里面使用这个'primary_value'?据我所知-我可以使用 Ajax 但我对此有点陌生,我不明白如何正确编写 Ajax 和产品控制器的方法。如果您需要控制器代码:

class ProductsController < AuthenticatedController
  before_action :set_product, only: %i[show edit update]

  def index
    if params.include?('id')
      redirect_to edit_product_path(params[:id]) and return
    end
  end

  def edit
    redirect_to products_path, error: 'product not found' unless @product
    render :edit_polaris
  end

  def update
    if @product.update(product_params)
      render json: {
        status: :ok,
        notice: 'Saved successfully!'
      }, status: 200
    else
      render json: {
        status: :error,
        error: 'Something Went Wrong'
      }, status: 400
    end
  end

  private

  def product_params
    params.permit(
      :id,
      primary_locale: {},
      locales: {}
    )
  end

  def set_product
    @product = Product.find(product_params[:id])
  end
end

这只是一个草图,但希望对您有所帮助。 它可以在您现有的控制器方法之一中,为了示例,假设您向 ProductsController 添加了一个名为 translated_string 的路由(和控制器方法)。

#ProductsController
 
def translated_string
   primary_value = params[:primary_value]
   @translated_string = GoogleTranslator.translate(primary_value, 'de')
   render json: {translated_string: @translated_string}
end

现在,当设置了 primary_value 的 DOM 页面出现问题时,您可以通过 ajax 将 primary_value 发送到 translated_string,然后您会收到 json 回复翻译后的字符串 - 你可以用它做任何你想做的事。这只是一个例子,有一百万种方法可以解决这个问题,希望这能给你一个方向。