0

私のビューresult.html.erbで@resultにアクセスできます。@result は Movie オブジェクトです。この @result オブジェクトのコメントをフォームから作成したいと思います。result.html.erb 内にコメント ボックス (フォーム) を配置しています。

フォームの構文は初めてです。また、送信後にフォーム自体をどこに送信するかについても混乱しています。create アクションを使用して、コメント用に新しいコントローラーをまとめて作成する必要がありますか?

@result.comments.last に保存されるようにこのフォームを作成する方法がわかりません

どんな助けでも大歓迎です!投稿されたのは私のモデルとコントローラーです。

class Movie < ActiveRecord::Base
  attr_accessible :mpaa_rating, :poster, :runtime, :synopsis, :title, :year

  has_many :comments

end


class Comment < ActiveRecord::Base
  attr_accessible :critic, :date, :publication, :text, :url

  belongs_to :movie
end


class PagesController < ApplicationController

  def index
  end

  def search
    session[:search] = params[:q].to_s
    redirect_to result_path
  end

  def result
    search_query = search_for_movie(session[:search])
    if !search_query.nil? && Movie.find_by_title(search_query[0].name).nil?
      save_movie(search_query) 
      save_reviews(search_query)
    end
    @result ||= Movie.find_by_title(search_query[0].name)
  end
end

結果.html.erb

私は simple_form gem の方が優れていると思っていたので使用していましたが、私のユース ケースは標準の Rails フォーム ヘルパーを使用するだけで十分シンプルだと思います。私が間違っている場合は、私を修正してください。これまでに書いたものは次のとおりです。

<%= simple_form_for @result do |f| %>
  <%= f.input :text %>
  <%= f.input :critic %>
  <%= f.button :submit %>
<% end %>

エラーが表示されます:

undefined method `movie_path' for #<#<Class:0x000001013f4358>:0x00000102d83ad0>
4

1 に答える 1

0

最終的に、ページコントローラーに #create アクションを追加し、ビューにフォームを次のように配置しました。

        <%= form_for @comment, :url => { :action => "create" } do |f| %>
          <div class="field">
            <%= f.text_area :text, placeholder: "Compose new review..." %>
                <%= hidden_field_tag 'critic', "#{current_user.name}"  %>
                <%= hidden_field_tag 'date', "#{Time.now.strftime("%m/%d/%Y")}"  %>
          </div>
          <%= f.submit "Post", class: "btn btn-large btn-primary" %>
        <% end %>

コントローラーで Pages コントローラー

  def create
    search_query = search_for_movie(session[:search])
    @movie = Movie.find_by_title(search_query[0].name)
    @comment = @movie.comments.create(text: params[:comment][:text], critic: params[:critic], date: params[:date])
    if @comment.save
      flash[:success] = "Review added!"
      redirect_to result_path
    else
      redirect_to result_path
    end
  end
于 2013-03-02T06:43:54.593 に答える