我有以下控制器操作:
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后调用时将其发送出去?
答案 0 :(得分:1)
您只是在控制器的@companyid
操作中分配create
实例变量,而不是new
操作。
您发布的视图模板是new
操作的一部分。所以你应该改变你的控制器:
def new
@companyid = current_member.company_id
@tag = Tag.new(company_id: @companyid)
end