2012-05-08 10 views
2

Jobというオブジェクトが、別のオブジェクト に属し、多くの関係でclientと呼ばれています。ここでRails 3.2 - 新しいデータベースエントリを編集しようとすると奇妙なエラーが発生する

が私の仕事のモデルがここに私のクライアントのモデルは新しい仕事を

class Client < ActiveRecord::Base 
    has_many :jobs 
end 

class Job < ActiveRecord::Base 
    belongs_to :client 
end 

だ、私は単純に、クライアントへの作成中にそれを割り当てます。

ただし、私は新しいジョブを作成しようとします。私の見解で見ているのは、名前の代わりに仕事のIDです。作成されたモデルの内部も空です。

ジョブを編集してもう一度保存しようとすると、次のエラーが表示されます。

Client(#2157214400) expected, got String(#2151988620) 

Application Trace | Framework Trace | Full Trace 
app/controllers/jobs_controller.rb:61:in `block in update' 
app/controllers/jobs_controller.rb:60:in `update' 

私のコントローラは何らかの形で間違っている可能性がありますが、これは私の最初のアプリですので、どこを見てもわかりません。

ここは私のコントローラです。

クラスJobsController < ApplicationControllerに

def index 
     @job = Job.all 

     respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @job } 
     end 
    end 

    def show 
     @job = Job.find(params[:id]) 

     respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @job } 
     end 
    end 

    def new 
     @job = Job.new(params[:id]) 

     respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @job } 
     end 
    end 

    def edit 
     @job = Job.find(params[:id]) 
    end 

    def create 
     @job = Job.new(params[:jobs]) 

     respond_to do |format| 
     if @job.save 
      format.html { redirect_to @job, notice: 'job was successfully created.' } 
      format.json { render json: @job, status: :created, location: @job } 
     else 
      format.html { render action: "new" } 
      format.json { render json: @job.errors, status: :unprocessable_entity } 
     end 
     end 
    end 

    def update 
     @job = Job.find(params[:id]) 

     respond_to do |format| 
     if @job.update_attributes(params[:job]) 
      format.html { redirect_to @job, notice: 'job was successfully updated.' } 
      format.json { head :no_content } 
     else 
      format.html { render action: "edit" } 
      format.json { render json: @job.errors, status: :unprocessable_entity } 
     end 
     end 
    end 

    def destroy 
     @job = Job.find(params[:id]) 
     @job.destroy 

     respond_to do |format| 
     format.html { redirect_to :jobs } 
     format.json { head :no_content } 
     end 
    end 
    end 

任意のポインタまたは右方向にうなずきは理解されるであろう。

+0

私達にあなたの仕事を編集するためのフォームを表示します。 – jdoe

+0

フォームはここに投稿するのが長いですが、ここにあります.. https://gist.github.com/2638538 – Keva161

答えて

0

ActiveRecordのは、Clientオブジェクトのインスタンスを期待するので、問題があり、それは(belogs_to関連するので)メソッドクライアント=を持っている あなたがリクエストからARオブジェクトをバインドすると、あなたが読むことができるのclient_idパラメータの代わりに、クライアント

を使用する必要がありますクライアント数が短い場合についてhttp://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

あなたは名前 としてのclient_idを選択使用することができます例http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

ますので、その

のような何かを行うことができます
select("job", "client_id", Client.all.collect {|c| [ c.name, c.id ] }, {:include_blank => 'None'}) 

代わりの

f.text_field :client, :class => 'text_field' 
+0

ありがとうございます。どこで指定する必要がありますか? – Keva161

+0

あなたはフォームテンプレートを更新する必要があります。更新された回答 – Fivell

+0

私はあなたが私のビューで言ったようにそのテキストを入力しましたが、私は見ているすべてのテキストが入力ボックスになりました。 – Keva161

関連する問題