1

Rails 3 の Ajax についてはある程度理解できたと思いますが、どこかで混乱しているか、何かを誤解していると思います。私の理解では、同じページで異なるコンテンツを呼び出したい場合は、その特定のアクション用に js.erb ファイルを作成します。たとえば、tynewyddnews のアクションがある場合、tynewyddnews ビューと tynewyddnews.js.erb ファイルがあります。

次に、そのページでレンダリングするパーシャルを作成し、.js.erb ファイルでそのパーシャルを呼び出します。

意見

<% @tynewyddpost.each do |t| %>
  <li>
    <% single = t.photos.first %>
    <a class="photo" href="#"><%= image_tag(single.avatar.url(:thumbnail_news_images)) %></a>
    <p><%= link_to t.title, tynewyddnews_path(:type => 'tynewyddnews'), :post_id => t.id, :remote => true %></p>
    <p class="date"><%= date_output(t.published_on) %></p>
  </li> 
 <% end %>

    <div class="post-item">
  <h2><%= @tynewyddpostlatest.title %></h2>
   <div id="work-samples"> 
    <% for photo in @tynewyddpostlatest.photos %>
     <%= image_tag(photo.avatar.url(:news_images), :class => 'work-sample') %>
   <% end %>
   </div>  
    <p class="post-description"><%= @tynewyddpostlatest.comments.html_safe %></p><a class="post-more" href="#">Continue Reading&nbsp;&raquo;</a>
    <div class="post-item-panel">
     <ul>
      <li class="date">
       <p><%= date_output(@tynewyddpostlatest.published_on) %></p>
     </li>
    </ul>
   </div>
  </div>

過去の投稿は左側に、最新の投稿は中央に表示されます

.js.erb

<% if params[:type] == 'tynewyddnews' %>
   jQuery('.post-item').html('<%= escape_javascript(render partial: 'tynewyddnewspost') %>');
<% end %>

部分的

<div class="post-item">
 <h2><%= @tynewyddpost.title %></h2>
  <div id="work-samples"> 
   <% for photo in @tynewyddpost.photos %>
    <%= image_tag(photo.avatar.url(:news_images), :class => 'work-sample') %>
   <% end %>
  </div>  
  <p class="post-description"><%= @tynewyddpost.comments.html_safe %></p>
   <div class="post-item-panel">
      <ul>
       <li class="date">
        <p><%= date_output(@tynewyddpost.published_on) %></p>
       </li>
      </ul>
  </div>
</div>

コントローラ

def tynewyddnews
tynewyddpost = Post.tynewydd_posts.find(params[:post_id])
tynewyddpost.shift
@tynewyddpost = tynewyddpost
@tynewyddpostlatest = Post.tynewydd_posts.first
end

tynewydd_posts はスコープです

scope :tynewydd_posts, :include => :department, :conditions => {"departments.name" => "Ty Newydd"}, :order => "posts.published_on DESC"

現時点で私の問題は、ページをレンダリングしようとするとエラーが発生することです

Couldn't find Post without an ID

長い投稿で申し訳ありませんが、誰かが私を正しい方向に向けることができれば、それは素晴らしいことです

ありがとう

4

2 に答える 2

1

やり方が間違っているようですね、すみません。それほど複雑である必要はありません。もっと単純な例でゼロからやり直し、そこから構築していきます。

rails g scaffold post title:stringブラウザコンソールで次のようなことをしてから、これを行います。

$.ajax({
  url: "/posts/index"
}).done(function() {
  console.log("done");
});

ブラウザのコンソールから戻ってくるデータを確認できるはずです。Rails 側では、そのデータは次の場所から取得されます。

class PostsController < ApplicationController
  def index
    @posts = Post.all
    # there might be more stuff here
  end
end

私が話していることを理解していただければ幸いです。そうでない場合は、Rails についてもう少し学び、jQuery/ajax についてもう少し学んでから、この 2 つを組み合わせてみることをお勧めします。

于 2013-04-10T20:46:24.053 に答える