如何在JavaScript中访问实例变量?

时间:2015-06-23 18:01:44

标签: javascript jquery ruby-on-rails ruby ajax

我有以下控制器操作:

def new
   @tag = Tag.new({company_id: current_member.company_id })
  end

 def create
    @tag = Tag.new(tag_params)
    @companyid = current_member.company_id
    respond_to do |format|
      if @tag.save
          format.html {redirect_to root_path}
          format.json {render :json=> @tag}
      else
        format.html {redirect_to root_path}
      end
    end
  end

在我的new.html.slim视图文件中,我有:

= simple_form_for @tag, url: tags_new_path, html: {id:'tag_form_submit', method: :post}, format: :js, remote:true do |t|
  =t.input :name, placeholder: 'tag'
  =t.button :submit, "submit tag", id:"submit_tag_button"

javascript:
  $(document).ready(function(){

    $("#submit_tag_button").click(function(event){
      event.preventDefault();
      <!-- $("#tag_form_submit").hide(); -->
      <!-- $('#add_tag_tag').hide(); -->
      var text = $("#inputbox").val();
      var name = $("#tag_name").val();
      var datatosend = { tag: {name:name, company_id: "#{@companyid}" } };
      $.ajax({
        url: "/tags/new",
        dataType: "json",
        method: "post",
        data: datatosend,
        success: function(result){
          console.log(result)
          var nameVar=result.name;
          var idVar=result.id;
          console.log(nameVar);
          console.log(idVar);
          var newspan='<span class="checkbox"><label for="job_tag_ids_'+idVar+'" name="job[tag_ids]"><input class="check_boxes optional form-control" data-remote="true" id="job_tag_ids_'+idVar+'" name="job[tag_ids][]" type="checkbox" value="'+idVar+'">' + nameVar + '</label></span>';
          $("#all_tags > div.form-group.check_boxes.optional.job_tags > div").append(newspan);
          <!-- $(#event_tag_ids).append('hi'); -->
          if ($("#event_tag_ids").length){
              $("#event_tag_ids").append('<option value="'+idVar+'">'+nameVar+'</option>');
          }

          // after its appended, erase from form input
           console.log(result.company_id);
          $("#tag_name").val("");
        }
      })
    })
  });

在我试图发送的datatosend变量中:

   var datatosend = { tag: {name:name, company_id: "#{@companyid}" } };

@companyid被发布为null。为什么呢?

如何从JavaScript中的控制器成功访问@companyid,以便在进行AJAX后调用时将其发送出去?

1 个答案:

答案 0 :(得分:1)

您只是在控制器的@companyid操作中分配create实例变量,而不是new操作。

您发布的视图模板是new操作的一部分。所以你应该改变你的控制器:

def new
  @companyid = current_member.company_id
  @tag = Tag.new(company_id: @companyid)
end