2


0

ビューを使用してモデル間で変数を転送する

私は非常に単純な書評サイトを作成しています、そしてそれはユーザーが本についての小さなコメントを加えることを可能にする能力を必要とします。 今、私は2つのテーブルを持っています。1つは本用で、もう1つはコメント用です。そして、2つのテーブル間のデータ転送方法が必要です。

したがって、私の本のモデルには "has_many:comments"が含まれ、私のコメントモデルには "belongs_to:book"が含まれます。

私はビューとコメントの追加の両方に使用しているビューは "/views/book/viewbook.html.erb"ですこれは本とすべての詳細を示しています。このように:

     <%= form.text_field :title %>
    <%= form.text_area :body %>
    <%= submit_tag "Add Comment", :class => "submit" %>

上記の ":title"と ":body"は本のモデルの中にあるのでこれはうまく行かないのですが、これらはコメントDBの中にあるので、それらをコメントのモデルに送る必要があります。 どのように私はこのデータをコメントデータベースに渡しますか。 私は ":comment.title"や他の様々なことを試しましたが、それでもこのデータを渡す方法を試してみることはできません。

任意の考えは大歓迎です。

(この質問が非常に愚かであるか、または十分に説明されていない場合はお詫び申し上げます。私の講師はこの課題を設定し、レールは私が今まで使ったことのない言語です。)

5 Answer


2


開始フォームタグでフォームの目的を定義します。

<%form_for:comment do | form | %>

<%= form.text_field:title%> <%= form.text_area:body%>

<%= submit_tag "コメントを追加"、:class => "submit"%>

<%= end%>

アイデアはフォームが空のコメントオブジェクトであるということです。 コントローラはモデルとビューの間で通信するので、コントローラはコメントオブジェクトをコメントモデルに保存することを知っているフォームを処理するアクションを持つべきです。 また、どの本にコメントを付けるかを指定する必要があります。 これを処理する方法はたくさんあります(隠しフィールド、入れ子になったRESTfulリソースなど)。

多分ここから始めましょう:http://guides.rubyonrails.org/action_controller_overview.html


0


入れ子になったオブジェクトフォームを使う必要があるようです。 これはRails 2.3の新機能です。


0


だから私はあなたの素晴らしい提案を使ってそれを修正しましたそして今一つの問題だけが出てきました。 私は首尾よくコメントのタイトル、本文、時間、そしてコメントをDBに残した人を保存することができますが、私はまだbook.idを保存する方法を考えることができません。 これがその見方です。

<%form_for:comment、:url => {:action => "addcomment"} do | form | %> <%= form.hidden_​​field:user_id、:value => session [:user_id]%> <%= form.hidden_​​field:book_id、:value => @ book.id%> <%= form.label "タイトル" %> <%= form.text_field:title%>

<%= form.label "Comment"%> <%= form.text_area:comment%> <%= submit_tag "addComment"、:class => "submit"%> <%end%>

これが、book.idとは別に、詳細を正常に保存できる私のコントローラです。

"def addcomment @newcomment = Comment.new(params [:comment])if @ newcomment.save flash [:notice] ="コメントがシステムに追加されました。 " redirect_to:action => "インデックス" end end

そのビューでは、 "@ book.title"や "@ book.authour"のようなものを使用して書籍の詳細も表示していますが、IDフィールドでは機能しないようです。しかし。


0


そのため、コメントを正しく投稿して正しい詳細を付けて保存できるようになりました。これで、 "book_id"値を使用して、その特定の書籍のコメントのリストを表示することができます。 これは私がうまくいくと思うものです、私はそれがうまくいくと思ったので私は私のアプリの検索部分にこのようなコードも持っています:

def view @book = Book.find(params [:id])@Reviews = Comment.find_by_book_id(@ book.id)end

対応するビューで:

<%if @reviews%> <%in @ review%> <%= form.label "タイトル:"%> <%h review.title%>

<%= form.label "レビュー:"%> <%h review.comment%> <%end%> <%end%>

これで、私が見ている本の "book_id"と、forループを使ってそれぞれ表示しているコメントを取得するはずです。 それでもうまくいきませんが、次のようなエラーメッセージが表示されます。

###抽出されたソース用の未定義のメソッド `each '(#27行目付近)

そして27行目は

<%for @reviews%>


0


本のコメントを見つけるにはそれだけです:

@book = Book.find(params [:id])

あなたが既にやったように、そして:

@ book.comments

その本のためにコメント。 そう:

<@ book.comments内のレビューの%%<%= form.label "タイトル:"%> <%h review.title%>

<%= form.label "レビュー:"%> <%h review.comment%> <%end%>

あなたはコントローラでコメントを見つける必要はありません。