【发布时间】:2011-05-10 19:12:40
【问题描述】:
当我通过脚手架控制器创建一个新对象时,如果我将一些 jquery 脚本操作到我的表单中并且这些脚本在我的控制器中触发了一个函数,那么这个函数不知道我刚刚创建的对象。为什么?
让我解释一下:
在我的控制器中,我首先创建我的对象:
def new
@projectmilestone = Projectmilestone.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @projectmilestone }
end
end
在我看来,我有一个包含一个嵌套部分的表单:
<%= semantic_form_for [:projects,@projectmilestone] do |form| %>
<%= form.semantic_errors :state %>
<%= form.inputs do %>
<%= form.input :department_id, :as => :select, :collection => Department.all%>
<div id="stakeholders">
<%=render :partial => "stakeholders", :locals => {:users => @users }%>
</div>
<% end %>
<%= form.submit "Submit" %>
<% end %>
利益相关者部分是这样的:
<%= semantic_form_for [:projects,@projectmilestone], :remote => true do |form| %>
<%= form.inputs :partial do %>
<%= form.input :user_id , :as => :select, :collection => users %>
<% end %>
<% end %>
当我更改 department_id 值时,会在我的 application.js 文件中触发一个 javascript 函数:
$('#projectmilestone_department_id').live('change', function() {
// make a POST call and replace the content
var department = $('select#projectmilestone_department_id :selected').val();
if(department == "") department="0";
var milestone = $('#form_id').html();
jQuery.get('/projects/projectmilestones/update_user_select/' + department, function(data){
$("#stakeholders").html(data);
})
return false;
});
这个函数在我的控制器中调用函数update_user_select:
def update_user_select
users=""
users = User.where(:department_id=>params[:department_id]) unless params[:department_id].blank?
render :partial => "stakeholders", :locals => {:users => users }
end
然后用户部分应该重新加载到我的表单中,但它不会因为@projectmilestone 为 nil。
为什么当我使用这个 jquery 脚本时@projectmilestone 没有持久化,而当我转到脚手架的创建功能时,@projectmilestone 没有持久化?
非常感谢!!!
【问题讨论】:
标签: jquery ruby-on-rails forms object