2012-03-08 6 views
2

私は、特定のカテゴリがあり、ユーザーが希望のカテゴリに投稿できるプレイフレームワークを使用して簡単なブログWebアプリケーションを作成していますが、投稿はすべてのカテゴリにも投稿されます。ブログフレームアプリケーションを使用した論理的なエラー

Application code: 
    import java.util.*; 
    import models.*; 
    public class Application extends Controller { 
     public static void index() { 
      List Posts = Post.find ("order by type desc").fetch(); 
      render(Posts); 
     } 
     public static void addpost (String content) { 
      Post post = new Post(content).save(); 

      renderJSON(content); 
html code:     
<h2> 
     CollabBlog 
    </h2> 
#{extends 'main.html' /} 
#{set title:'Home' /} 
<head> 
     <title>#{get 'title' /}</title>  
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <link rel="stylesheet" type="text/css" media="screen" 
      href="@{'/public/stylesheets/categories.css'}" />   
    </head> 
<h3>Category: Health</h3> 
#{ifnot Posts} 
    No posts to view 
#{/ifnot} 
<ul> 
    #{list items:Posts, as: 'Post'} 
    <li>   
     <p>${Post.poster}</p><p>${Post.content}</p>   
    </li> 
    #{/list} 
</ul> 
<p> 
    <a id="addpost" href="#">add new Health's post</a>  
</p> 
<h3>Category: Politics</h3> 
#{ifnot Posts} 
    No posts to view 
#{/ifnot} 
<ul> 
    #{list items:Posts, as: 'Post'} 
    <li>   
     <p>${Post.poster}:</p><p>${Post.content}</p>   
    </li> 
    #{/list} 
</ul> 
<p> 
    <a id="addpost" href="#">add new Politic's post</a>  
</p> 
<h3>Category: Entertainment</h3> 
#{ifnot Posts} 
    No posts to view 
#{/ifnot} 
<ul> 
    #{list items:Posts, as: 'Post'} 
    <li>   
     <p>${Post.poster}</p><p>${Post.content}</p>   
    </li> 
    #{/list} 
</ul> 
<p> 
    <a id="addpost" href="#">add new Entertainment's post</a>  
</p> 
<body> 
    <link href="index.css" rel="stylesheet" type="text/css"> 
</body> 
<script type="text/javascript" charset="utf-8"> 
$('#addpost').click(function() { 
    $.post('@{addpost()}', {content: prompt('post content ?')}, function(Post){ 
     $('ul').prepend() 
    }) 
    $.post('@{addpost()}', {poster : prompt('which category ?')}, function(Post){ 
     $('ul').prepend() 
    }) 
}) 
</script>     
      } 


     } 

誰でもこの問題の解決方法を知っていますか?

+0

投稿はどのようにカテゴリにリンクされますか? – digiarnie

+0

実際にはリンクされていないので、ユーザーは自分が望むカテゴリに投稿を追加することにします。 –

+0

あなたの3つのカテゴリでは、同じアイテム(投稿)で#{list}を呼び出します。カテゴリーは投稿間でどのように区別されますか? – digiarnie

答えて

1

あなたの追加のコメントを読んだら(そしてうまくいけば私が誤解していないことが分かっている)、あなたのコントローラーでできることは、あなたのtype列のすべてのユニークなカテゴリーを見つけることです。あなたがすべて表現するマップのキーの上に行くことができ、あなたのビューで、その後

Map<String, List<Post>> map = new HashMap<String, List<Post>>(); 
// the categories variable here is the unique types from the Post table 
for (String category : categories) { 
    List<Post> posts = Post.find("type = ?", category).fetch(); 
    map.put(category, posts); 
} 
render(map); 

そして:そして、それぞれのタイプ(下記のコードスニペットでcategories変数によって表されるような)のために、あなたはこの電話をかけることができキーに関連付けられた値を取得し、そのカテゴリの投稿を繰り返し処理します。

上記は、ユーザーが希望するものを入力できることを前提としています。元の投稿のビューの例に応じて、健康、政治、エンターテイメントのいずれかを選択するようにしたい場合は、データベースのカテゴリをモデル化する必要があります。一部のオプションは次のようになります。(1)ポスト及び(2)カテゴリー:あなたは2つのエンティティを持っている可能性が

まずオプション

。あなたが最初に持っているもの。次に作成する必要があります。ユーザー場合、これは良いでしょう

@Entity 
public class Post extends Model { 

    @ManyToOne 
    @JoinColumn(name = "category_id") 
    public Category category; 

    ... 
} 

(または:次に、あなたのポストのエンティティにあなたはポストと、このようなカテゴリーのエンティティ間の関係を持つことができます

@Entity 
public class Category extends Model { 

    @OneToMany(mappedBy = "category", targetEntity = Post.class) 
    public List<Post> posts; 

    ... 
} 

:だから、次のように分類エンティティを作成ユーザーが事前に定義したカテゴリを選択できるように、カテゴリを動的に(またはデータベースに直接)作成することができます。

番目のオプション

上記の例では、カテゴリは、単に言葉で説明のような他の性質を持っていないため、その後、あなただけのカテゴリの列挙型を使用することができますやり過ぎている場合:

public class Post extends Model { 

    @Enumerated(EnumType.STRING) 
    public Category category; 

    ... 
} 

public enum Category { 
    HEALTH, 
    ENTERTAINMENT, 
    POLITICS 
} 

再びこのオプションは、ユーザーがのSelectIになることを意味します。カテゴリーは、このような列挙型である

あらかじめ定義されたリストから。

関連する問題