【问题标题】:ajax adding information to databaseajax向数据库添加信息
【发布时间】:2012-09-18 22:04:59
【问题描述】:

我对整个 ruby​​ on rails 的东西还是相当陌生,尽管我已经读到您可以轻松地执行 ajax 请求。我想要做的是向数据库表中添加一个新行,并从中传递一些变量。

我现在拥有的是

%li= link_to image_tag('trans.gif', :border => 0, :size => '16x16', :class => 'i-16-tick'), availabilities_path(:team_id => schedule.team_id, :user_id => current_user, :schedule_id => schedule.id), :remote => true, :method => :post, :title => 'Accept', :rel => 'tooltip-html'

控制器代码

`# POST /可用性 # 发布 /availabilities.json 定义创建 @availability = Availability.new(params[:availability])

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

结束 `

但它如何知道将哪些变量传递给数据库?

这是目前正在发生的事情

Processing by AvailabilitiesController#create as HTML Parameters: {"schedule_id"=>"18", "team_id"=>"1", "user_id"=>"38"} User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 38 LIMIT 1 (0.4ms) BEGIN SQL (20.1ms) INSERT INTO "availabilities" ("available", "created_at", "schedule_id", "team_id", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["available", nil], ["created_at", Tue, 18 Sep 2012 23:07:26 EST +10:00], ["schedule_id", nil], ["team_id", nil], ["updated_at", Tue, 18 Sep 2012 23:07:26 EST +10:00], ["user_id", nil]] (10.5ms) COMMIT

【问题讨论】:

    标签: ruby-on-rails jquery activerecord


    【解决方案1】:

    如果您想向服务器传递多个变量,请将它们包含在 http 请求中。对于 AJAX 请求和常规请求都是如此。例如:

    <%= link_to 'Send data', accept_availabilty( player, :my_variable => value1, :my_variable => value2), :remote => true %>
    

    通常虽然提交更复杂,但您会希望使用远程表单,而不仅仅是一个简单的链接。

    【讨论】:

    • 我遇到的问题是它的 GETTING 而不是 PUTTING 即Started GET "/availabilities?schedule_id=18&amp;team_id=1&amp;user_id=38" for ****** at 2012-09-18 14:53:05 +0200 Processing by AvailabilitiesController#index as HTML Parameters: {"schedule_id"=&gt;"18", "team_id"=&gt;"1", "user_id"=&gt;"38"}
    • 这是一个不同的问题,但您可以使用:method =&gt; :put 或其他方式修改链接的方法。查看api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html
    • 已经解决了这个问题,但它就像我的参数在控制器中没有被检测到:S
    • 不确定您要发送的确切内容,但您可以检查服务器日志中发生的情况(根据您之前的示例:{"schedule_id"=&gt;"18", "team_id"=&gt;"1", "user_id"=&gt;"38"} ),甚至更好地使用 Firebug 检查 http 请求本身(您可以在“控制台”选项卡中查看 ajax 请求详细信息。)如果看起来没问题,您可能必须调试控制器本身,看看您是否使用了正确的参数键。如果您要 PUT 数据,您可能也必须使用远程表单而不是远程链接,我不能 100% 确定 url 编码的参数将与 PUT 请求一起使用。
    • 这是有道理的,正如您在日志中看到的那样,{"schedule_id"=&gt;"18", "team_id"=&gt;"1", "user_id"=&gt;"38"} 不包含 availability 键。在您的 link_to 声明中,我也没有看到任何对“可用性”的提及。您能否澄清一下,这些表单值是您要发送的吗?这些可用性数据应该来自哪里?
    【解决方案2】:

    如果您想将信息传递给您的 rails 应用程序,您需要将

    :remote => true
    

    在 form_for 标签上,然后您的控制器将能够将这些参数传递给您的模型。

    【讨论】:

    • 我有remote true,但是说我想传递player_id,schedule_id 应用程序如何接他们?
    猜你喜欢
    • 2015-03-11
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多