這個問題必須有一個簡單的答案,但我仍然無法得到它的工作。RoR如何通過javascript函數在參數中傳遞應用程序ID
我有一個Ruby On Rails應用程序,允許用戶使用數據庫管理項目(創建,更新,顯示,編輯,銷燬等)。例如,當用戶編輯一個項目時,她/他會被帶到一個頁面,如http://:3000/projects/3/edit,他/她可以在那裏修改表單中的條目。注意在這個例子中用戶正在編輯項目3。
要編輯的項目,用戶點擊該按鈕
<td><%= button_to 'Edit', { :action => "edit", :id => project }, :method => :get %></td>
它調用此方法
# GET /projects/1/edit
def edit
@project = Project.find(params[:id])
end
和工作正常。
但是,我添加了另一個方法調用updateFields,以便在修改字段時,會運行一個名爲updateFields的JavaScript函數,並調用修改窗體中其他相關字段的AJAX請求。以下是從updateFields摘錄:
<script language="JavaScript" type="text/javascript">
function updateFields(){
$.ajax({
url: "<%= update_fields_projects_url %>",
data: {
project_year: $('.project_year_class').val(),
project_type: $('.project_type_class').val(),
<snip>
}
});
}
</script>
在控制器中,然後我就可以得到所有的信息,我需要在參數數組,如下所示:
# PUT /projects/1
# PUT /projects/1.json
def update_fields
@project = Project.find(params[:project])
@project_year = params[:project_year]
@project_type = params[:project_type]
<snip>
respond_to do |format|
if @project.update_attributes(params[:project])
format.js
format.html
else
format.html { render :action => "update" }
format.json { render :json => @project.errors, :status => :unprocessable_entity }
end
end
end
我的問題是,我「M無法更新的形式,並在服務器上,我看到了以下錯誤消息
ActiveRecord::RecordNotFound (Couldn't find Project without an ID):
app/controllers/projects_controller.rb:101:in `update_fields'
Rendered /var/lib/gems/1.8/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.5ms)
Rendered /var/lib/gems/1.8/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.2ms)
Rendered /var/lib/gems/1.8/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (10.8ms)
如果我直接指定項目的ID,一切工作正常
@project = Project.find(3)
我的問題是我如何通過javascript函數以params傳遞給控制器的方式與project_year和project_type相同?在這個例子中,它是3,但是每個項目都會有所不同,因爲它是在項目創建時分配的。
UPDATE1
<%= form_for(@project, :html => {:name => "ProjectInfo"}) do |f| %>
<input type=button id=project_info_button_id value="Show Details" onclick="showHideDiv('project_info_id','project_info_button_id');">
<div class="form input", id='project_info_id', style='display:none'>
<% concat "Project Year" %>
<%= f.text_field :ProjectYear, {:class=>"project_year_class", :Size=>6, :style=>"text-align:right"} %>
<snip>
<% end %>
<% end %>
你可以張貼則params的輸出控制器的update_field行動? ('puts params.inspect') – MrYoshiji
感謝MrYoshiji爲您的及時答覆。 params.inspect輸出所有我明確傳遞給javascript函數的參數,但它們都不是項目ID,因爲我找不到正確的語法。如果你能以這種語法幫助我,我將不勝感激。謝謝 – rh4games