【问题标题】:Ruby Rails - structuring data for AJAX call to controller actionRuby Rails - 为 AJAX 调用控制器操作构建数据
【发布时间】:2014-01-02 17:25:20
【问题描述】:

我的网站上需要一个按钮,可以将信息发送到控制器的创建操作(“页面时间”)。它似乎正在工作,尽管它没有发送我指定的所有数据——可能与我无法构造数据向量有关。我通过post 'pagetimes/create'在我的 config/routes.rb 文件中提供了 POST 请求

在 application.js 中:

function submitForm() {
  alert("checked the button - worked");
  $.ajax({
    type:'POST', 
    url: '/pagetimes/create', 
    data: { pagename: "whatever", start: 7, end: 21 } ,
  });
}

其中:pagename:start:end 是我的数据表中的列(字符串、整数、整数),可以在模型中访问,并且可以在手动输入“新”页面中显示的内容中找到一个新的页面时间。

在我的页面视图中:

<button type="button" onclick="submitForm()">Send data</button>

其他一切都很标准。我可以在我的数据库中看到帖子已成功提交,但我尝试填充的 3 个数据字段都是 NULL。可能这与我如何构建 data: {} 字段有关?

O/w,Win7 上的 Rails 3,不使用任何可能与此有关的其他花哨的东西...

更新 1:这就是我试图发布的表单源代码的样子。也许是我错误地引用了这些字段?

<div class="form-inputs">
  <div class="control-group string optional pagetime_pagename"><label class="string optional control-label" for="pagetime_pagename">Pagename</label><div class="controls"><input class="string optional" id="pagetime_pagename" name="pagetime[pagename]" size="50" type="text" /></div></div>
  <div class="control-group integer optional pagetime_start"><label class="integer optional control-label" for="pagetime_start">Start</label><div class="controls"><input class="numeric integer optional" id="pagetime_start" name="pagetime[start]" step="1" type="number" /></div></div>
  <div class="control-group integer optional pagetime_end"><label class="integer optional control-label" for="pagetime_end">End</label><div class="controls"><input class="numeric integer optional" id="pagetime_end" name="pagetime[end]" step="1" type="number" /></div></div>
</div>

更新 2:这是包含 POST 的日志:

Started POST "/pagetimes/create" for 127.0.0.1 at 2014-01-02 12:45:48 -0500
Processing by PagetimesController#create as */*
  Parameters: {"end"=>"21", "pagename"=>"whatever", "start"=>"7"}
  [1m[35mUser Load (1.0ms)[0m  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  [1m[36m (0.0ms)[0m  [1mbegin transaction[0m
  [1m[35mSQL (15.0ms)[0m  INSERT INTO "pagetimes" ("created_at", "end", "pagename", "start", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?)  [["created_at", Thu, 02 Jan 2014 17:45:48 UTC +00:00], ["end", nil], ["pagename", nil], ["start", nil], ["updated_at", Thu, 02 Jan 2014 17:45:48 UTC +00:00], ["user_id", 1]]
  [1m[36m (7.0ms)[0m  [1mcommit transaction[0m
Redirected to http://localhost:3000/pagetimes/22
Completed 302 Found in 91ms (ActiveRecord: 24.0ms)

更新 3:控制器操作

def create
  @pagetime = Pagetime.new(params[:pagetime])
  @pagetime.user = current_user

  respond_to do |format|
    if @pagetime.save
      format.html { redirect_to @pagetime, notice: 'Pagetime was successfully created.' }
      format.json { render json: @pagetime, status: :created, location: @pagetime }
    else
      format.html { render action: "new" }
      format.json { render json: @pagetime.errors, status: :unprocessable_entity }
    end
  end
end

【问题讨论】:

  • 这表示前端代码没有问题。数据被发送到后端服务器。你能发布你的控制器(动作)代码吗?
  • 我是否需要将 @pagetime = Pagetime.new(params[:pagetime]) 更改为其他内容以包含更多传递的参数?这本来是我会忽略的。
  • 是的。你能试试这个吗? data: $.param({ pagetime: {pagename: "whatever", start: 7, end: 21 }}) 。否则你可以试试Pagetime.new(:pagename =&gt; params[:pagename], :end =&gt; params[:end], :start =&gt; params[:start])
  • 第一个成功了!!控制器创建动作没有变化。 @arun15thmay,我欠你的分数比我通过选择你的答案所能给出的要多得多。当您编辑为最终版本时,我将选择它。非常感谢!
  • 我已经编辑了我的答案。但我建议你最好的做法是第二种方式。因为可以从前端发送虚假数据。

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


【解决方案1】:
 function submitForm() {
      alert("checked the button - worked");
      $.ajax({
           type:'POST', 
           url: '/pagetimes/create', 
           data: $.param({ pagetime: {pagename: "whatever", start: 7, end: 21 }})
      });
 }

【讨论】:

  • 感谢您的快速回复。我试过了,但我的数据库中的这些列仍然为 NULL。
  • @SOConnell 你能检查你的 Rails 日志吗?发布此 ajax 请求时,日志将显示类似以下内容Processing by SessionsController#create as HTML Parameters: {"utf8"=&gt;"✓", "authenticity_token"=&gt;"", "email"=&gt;"test@test.com",, "commit"=&gt;"Sign In"}
【解决方案2】:
$.post( "/pagetimes/create", { pagename: "whatever", start: "7", end: "21"  })
.done(function( data ) {
  alert( "Data Loaded: " + data );
});

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多