【问题标题】:Passing javascript variables to rails controller将javascript变量传递给rails控制器
【发布时间】:2013-12-26 14:56:20
【问题描述】:

这是我遇到的问题。我想将 javascript 变量传递给 rails 控制器。

<script>
var mdate = "26 December 2013";
var phone = prompt('Enter your phone!');
if (phone) {
    //Passing mdate and phone variables to rails controller(book_date & phone)
}
else
{
    alert("Cancelled");
}
</script>

我的控制器

def new
        @booking = Booking.new
end
def create
    @booking = Booking.new(book_param)
    if @booking.save
        redirect_to root_url
    else
        flash[:notice_booking_failed] = true
        redirect_to root_url
    end
end

private
def book_param
    params.require(booking).permit(:id, :book_date, :phone)
end

提前谢谢你!

【问题讨论】:

    标签: javascript ruby-on-rails variables


    【解决方案1】:

    从技术上讲,您不能在两种语言之间传递变量。

    您可以通过附加在 url 中将这些值传递给 rails 控制器

    <script>
    var mdate = "26 December 2013";
    var phone = prompt('Enter your phone!');
    if (phone) {
        //Passing mdate and phone variables to rails controller(book_date & phone)
        window.open("localhost:3000//controller/create?mdate="+mdate+"&phone="+phone,"_self")
    }
    else
    {
        alert("Cancelled");
    }
    </script>
    

    在你的控制器中

    def create
        data = params[:date]
        phone = params[:phone]
        @booking = Booking.new(book_param)
        if @booking.save
            redirect_to root_url
        else
            flash[:notice_booking_failed] = true
            redirect_to root_url
        end
    end
    

    注意:确保您相应地配置了您的 config/route.rb

    更多信息http://guides.rubyonrails.org/routing.html

    【讨论】:

    • 非常感谢。我只是做了window.open("/controller/create?mdate="+mdate+"&amp;phone="+phone,"_self"),它对我有用。 :)
    • 您可以通过隐藏字段轻松传递数据。
    • 问题是关于如何将JS变量传递给rails。无论如何,这里不需要隐藏字段。
    • 你好 shiva,这两个字段(数据、电话)是否必须在表单内?如果是,那么我应该在 form_for 标签中给出控制器名称吗?在我的情况下,我有 member_code 字段和许多按钮来创建不同控制器的方法。每次按下按钮(或 link_to)时,我想将 member_code 发送到相应的控制器。有可能吗?
    【解决方案2】:

    jQuery 中的 Ajax 代码:

    $("#submit_button").submit(function(event) {
    
      /* stop form from submitting normally */
       event.preventDefault();
    
      /* get values from elements on the page: */
       var mdate = $('#mdate').val();
       var phone = $('#phone').val();
    
      /* Send the data using post and put the results in a div */
        $.ajax({
          url: "/BookCreate/?mdate="+mdate+"&phone="+phone,
          type: "post",
          data: values,
          success: function(){
            alert('Saved Successfully');
          },
          error:function(){
           alert('Error');
          }
        });
    });
    

    路线:(我假设您的控制器名称是 book)

    match '/BookCreate', to: 'book#create'
    

    为此,您必须将 jquery 文件添加到您的代码或此链接中

    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    

    【讨论】:

      【解决方案3】:

      你可以使用类似的东西

      $.post("/bookings?booking[phone]=" + phone + "&booking[book_date]=" + mdate)
      

      它将使用参数哈希转到BookingsController#create 操作:

      { booking: { phone: "entered from prompt", book_date: "26 December 2013" } }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多