1

コメントを作成するフィールド(pcommentという名前)があります。私は、purchase_idを自動的に追加するように、pcommentテーブルのpcommentにuser_idを自動的に追加するようにしようとしています。なぜpurchase_idがデータベースに記録されているのかわかりませんが、user_idは各コメントで空白のままです。これがコメントのフォームです。

<%= form_for([purchase, purchase.pcomments.build], :html => { :id => "blah_form" }) do |f| %>

    <div class="field">
      <h4>What deal are you offering?</h4>
      <%= f.text_field :body %>
    </div>

  <% end %>

hidden_​​fieldを追加する必要があるかもしれませんが、そうは思いません。私はhttp://ruby.railstutorial.org/book/ruby-on-rails-tutorial#cha-user_micropostsをリソースとして使用しており、マイクロポストにはhidden_​​fieldがありません。代わりに、user_idにインデックスが付けられ、マイクロポストの作成時に自動的に作成されます(その時点でサインインしているユーザーに基づいて)。この部分は私にとっても機能しており、pcommentsテーブルでuser_idにインデックスを付けるだけで、自動的に生成されるという私の論理に追加されます。これが私のデータベースの現在の状態を確認できるように私のschema.rbファイルです。

   ActiveRecord::Schema.define(:version => 20121011085147) do

  create_table "pcomments", :force => true do |t|
    t.string   "body"
    t.integer  "purchase_id"
    t.integer  "user_id"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
  end

  add_index "pcomments", ["purchase_id"], :name => "index_pcomments_on_purchase_id"
  add_index "pcomments", ["user_id"], :name => "index_pcomments_on_user_id"

  create_table "purchases", :force => true do |t|
    t.string   "content"
    t.integer  "user_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  add_index "purchases", ["user_id", "created_at"], :name => "index_purchases_on_user_id_and_created_at"

  create_table "sales", :force => true do |t|
    t.string   "content"
    t.integer  "user_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  add_index "sales", ["user_id", "created_at"], :name => "index_sales_on_user_id_and_created_at"

  create_table "scomments", :force => true do |t|
    t.string   "body"
    t.integer  "sale_id"
    t.integer  "user_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  add_index "scomments", ["sale_id"], :name => "index_scomments_on_sale_id"
  add_index "scomments", ["user_id"], :name => "index_scomments_on_user_id"

  create_table "users", :force => true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
    t.string   "password_digest"
    t.string   "remember_token"
    t.boolean  "admin",           :default => false
  end

  add_index "users", ["email"], :name => "index_users_on_email", :unique => true
  add_index "users", ["remember_token"], :name => "index_users_on_remember_token"

end

データベースがチェックインし、purchase_idを含むすべての列が入力された状態でpcommentが正常に作成されたが、user_idはまだ空白であることがわかっている理由です。また、ユーザーhas_manypcommentsおよびhas_manypurchases。購入has_manypcommentsおよびbelongs_touser。pcommentはbelongs_touserとbelong_topurchaseです。

また、ここにpcomments_controller.rbがあります

    class PcommentsController < ApplicationController
  before_filter :signed_in_user
  def create
    @purchase = Purchase.find(params[:purchase_id])
    @pcomment = @purchase.pcomments.build(params[:pcomment], :user_id => @purchase.user_id)

    @pcomment.purchase = @purchase

    if @pcomment.save
       flash[:success] = "Offer submited!"
       redirect_to :back
    else
      render 'shared/_pcomment_form'
    end
  end

  def new
    @pcomment=purchase.pcomments.new
  end


end

      def new
        @pcomment=purchase.pcomments.new(:user_id => purchase.user_id)
      end


    end
4

1 に答える 1

0

purchase.pcomments.buildから入力されたpurchase_idだけで空のPcommentオブジェクトを構築しますpurchase。割り当てるにはuser_id、属性を持つハッシュも渡します。

purchase.pcomments.build(:user_id => purchase.user_id)
于 2012-10-11T09:45:16.037 に答える