【问题标题】:Submit value to Rails Model向 Rails 模型提交价值
【发布时间】:2013-02-19 15:10:52
【问题描述】:

如果我有这个作为我的表单

<%= form_for @rating, :id =>"ratingForm" do |f| %>
<%= f.hidden_field :ratings, :value => '' %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :recipe_id, :value => @recipe.id %>
<div class="rateit" id="rateit10">
</div>
<%= f.submit "Submit" %>
<% end %>

如何传递这个div中内容的值

<div class="rateit" id="rateit10">
</div>

如果我使用这个 jquery,我可以得到 rateit10 的值

$("#rateit10").bind('rated', function() { 
 $(this).rateit('value');
  });

该值来自点击一组星星,我尝试使用 Rateit 插件在 Rails 中实现评级系统

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby-on-rails-3 models


    【解决方案1】:

    这会将哈希传递给您的控制器方法:

       function pass_to_controller(){
        var rate_value = $("#ratings").value();
        var user_id = $("#user_id").value();  /*you already have access to this through current_user.id */
        var recipe_id = $("#recipe_id").value();
    
        $.ajax({
            type: "Get",
            url: "path_to_your_controller_action_here",
            timeout: 5000,
            data: {rating : rate_value, user : user_id, recipe : recipe_id }
        }).done(function(response){//do your response here});
    }
    

    你不能直接传递给模型——这绕过了 MVC 背后的整个思考过程。所以最好的方法是使用ajax,将它传递给你的控制器方法,然后如果你需要在你的数据库中做一些事情,调用你的模型方法。

    像这样使用ajax 的好处是,当有人评价某事时,它不会重新加载您的页面。

    【讨论】:

    • 所以我不再需要表单中的 hidden_​​field :ratings 了?
    • 如果您要使用ajax?不,因为您不需要提交整个表单,只需更新数据库中的一个值。
    • 好的,如果有更多数据要提交,比如说另外 2 个隐藏字段呢?
    • 同样的事情var val1, val2 = your_hidden_fields 然后将它们添加到数据哈希`data: {value : rate_value, value1: val1, val2: val2} @Richlewis
    • 我已经用我的整个表格更新了问题,你能提供一个例子吗
    【解决方案2】:

    最简单的方法是在用户点击星星时触发隐藏字段的更新,而不是在提交表单时读取星星的值。

    我应该在星星上添加一个 onnclick 事件来更新隐藏字段。为此,请使用 :id => "my_hidden_​​field" 将 ID 添加到隐藏字段中。

    然后,当用户点击星号时触发一个javascript函数:

    $("#second_star").click(function() {
      $("my_hidden_field").value = 2;
    });
    

    【讨论】:

    • 是的,我会在每颗星上放一个 id,并为每颗星绑定正确的操作以填充隐藏字段。
    【解决方案3】:

    使用 javascript 在 div 中显示文本:

    divObj = document.getElementById("rateit10");
                if ( divObj ){
                    if ( divObj.textContent ){ //FF
                        alert ( divObj.textContent );
                    }else{  //IE            
                        alert ( divObj.innerText );  //alert ( divObj.innerHTML );
                    } 
                }  
    

    使用 javascript 在 div 中显示 innerdiv:

    myDivObj = document.getElementById("rateit10");
    if ( myDivObj ) {
       alert ( myDivObj.innerHTML ); 
    }else{
       alert ( "Text Found" );
    }
    

    使用 jquery 在 div 中显示文本

    $(function(){
           var txt = $('#rateit10').text();
           alert(txt);
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多