【问题标题】:View not rendering查看未渲染
【发布时间】:2014-04-10 02:30:47
【问题描述】:

我正在尝试使用 jquery 从当前视图呈现视图。我正在为我的项目使用 flexigrid,我想为信息按钮编写代码。

这是我的看法。使用 jquery 我正在调用以下内容,

var name = $('.trSelected .sorted div').html();
$.post("/contacts/display_info/", {file_as : name});

我的控制器如下。也试过调试。

def display_info
        @contact = Contacts.find_by_file_as(params[:file_as])
        puts "---------------"
        puts @contact.id
        puts "---------------"
        render(:action => 'display_info' , :id => @contact.id)
    end

这是我的控制台:

无法弄清楚是什么问题。请帮忙!

【问题讨论】:

  • 为什么不用redirect_to contact_path(@contact) 而不是render(:action => 'contacts' , :id => @contact.id)
  • @rony36 它仍然显示'500 internal server error'。
  • contact action 有什么看法吗?
  • @rony36 哎呀!!我编辑了这个问题。现在它显示呈现的“联系人/显示信息”。我编辑了问题
  • errr,有什么问题吗?您正在发布到一个操作,日志显示该操作的视图正在呈现。

标签: jquery ruby-on-rails webrick


【解决方案1】:
  1. 如果您正在执行 ajax 请求,最好是 JSON
  2. 对于 Json,请检查联系人文件夹中名为 contacts.json.erb 的文件。
  3. 您可以尝试使用远程 true、比 ajax/json 请求更干净和更好的选项。

检查这个:http://railscasts.com/episodes/205-unobtrusive-javascript

尝试放入你的控制器

respond_to do |format|
    format.html
    format.json { render :json=> {:success => true, :id => @contact.id } }
end

类似的东西。

【讨论】:

  • 不,那个文件夹里没有json。
  • @FredoCorleone 如果您在 URL 中键入您呈现的网址,会发生什么情况?
  • @sahil 你能详细说明一下吗?也许更正我的代码?它必须通过 jquery,因为我使用的是 flexigrid
  • 我编辑了这个问题。我的操作是错误的。请检查一下。
  • 200 OK。您还面临什么其他问题?
【解决方案2】:

在您的layout,请添加:

<%= csrf_meta_tag %>

当您是 posting 时,请确保您正在发送:

 "authenticity_token": "<%= form_authenticity_token %>"

更具体地说:

$(document).ajaxSend(function(e, xhr, options) {
  var token = $("meta[name='csrf-token']").attr("content");
  xhr.setRequestHeader("X-CSRF-Token", token);
});

谢谢。

【讨论】:

  • 我已经在 'head' 中有 。我无法弄清楚添加第二行的位置。帮助。
  • 我已经在帖子中提到了。
  • 我得到了答案。它是window.location.replace。我的方向完全错误。感谢您的协助!
【解决方案3】:

问题是您正在发出 ajax 请求,但您没有对它做任何事情。您需要一个回调来捕获请求的响应,并以某种方式对其进行处理。

类似:

$.post("/contacts/display_info/", {file_as : name}, function(data) {
  // `data` will be the HTML returned by the server

  // If for example you want to render this HTML on your page, you may want something like: 
  $('#my_fancy_div').html(data);
});

您还需要将控制器操作更改为 render layout: false,假设您只想在视图中呈现 HTML,而不是周围的应用程序布局。

【讨论】:

  • 我想将控件移动到“/contacts/display_info/name_of_the_contact”。我怎么做。如果我的问题是错误的,我很抱歉,但是没有 ajax 可以做到吗??
  • @sevenseacat 他说它在 Rails 控制台中呈现,但它并没有在 WEB BROWSER 中通过..有点奇怪
  • @sevenseacat 我得到了答案。它是window.location.replace。我的方向完全错误。感谢您的协助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多