javascript - RoR如何通过javascript函数在参数中传递应用程序ID

标签 javascript ruby-on-rails controller parameters

这个问题一定有一个简单的答案,但我仍然无法让它发挥作用。

我有一个 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>

在 Controller 中,我可以在 params 数组中获取所需的所有信息,如下所示:

# 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

我遇到的问题是我无法更新表单,并且在服务器上,我看到以下错误消息

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)

我的问题是如何以与project_year和project_type相同的方式通过javascript函数将参数传递给 Controller ​​的id?在本例中,它是 3,但每个项目都会有所不同,因为它是在创建项目时分配的。

更新1

<%= 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 %>

最佳答案

您需要在ajax请求的数据部分传递项目id:

<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(),
            id: <%= @project.id %>,
            <snip>

        }
    });
}
</script>

关于javascript - RoR如何通过javascript函数在参数中传递应用程序ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421650/

相关文章:

javascript - 如何检测phaser3中图像的点击

ruby-on-rails - Net::SSH:您必须具有TTY才能运行sudo

ruby-on-rails - 如何从 AR::Relation 中删除条件?

java - Spring MVC ModelAttribute 作为接口(interface)

arrays - 如何用groovy语言将项目一一添加到数组中

javascript - 查找数组中的特定元素javascript

javascript - 使用 .replace 将 HTML 字符串替换为 javascript

ruby-on-rails - 基于正则表达式的 Rails 自定义验证?

azure - 最佳实践 : Calling separate Web-API Service from Single Page Application (SPA)

javascript - ExtJS 4,自定义Ext.grid.Panel的boolean列值