私がやろうとしているのは、メモを追加して Rails のクライアントに関連付けることです。
私のクライアントモデルは次のようになります。
class Client < ActiveRecord::Base
attr_accessible :company_name, :contact_name, :email_address, :phone_number,
:street_address, :city, :state, :zip
has_many :notes, dependent: :destroy
end
私のメモモデルは次のようになります。
class Note < ActiveRecord::Base
attr_accessible :content
belongs_to :client
default_scope order: 'notes.created_at DESC'
validates :client_id, presence: true
end
クライアントの index.html.erb は次のようになります。
<% @clients.each do |client| %>
.
.
.
<%= form_for(@notes) do |f| %>
<%= f.text_area :content, placeholder: "Compose new note..." %>
<%= f.submit "Add Note", class: "buttonPri addnote" %>
<% end %>
<% end %>
私のクライアントコントローラーには次のものがあります:
def index
if signed_in?
@clients = Client.all
@note = client.notes.build
else
redirect_to signin_path
end
end
そして私のノートコントローラーで:
def create
@note = client.notes.build(params[:note])
if @note.save
flash[:success] = "Note Created"
redirect_to root_path
else
render 'static_pages/home'
end
end
undefined local variable or method client for #<ClientsController:0x007f835191ed18>
クライアント インデックス ページをロードするとエラーが発生します。私が考えているのは、コントローラーがブロック変数client
を認識できないため、それをコントローラーから form_for に移動する必要があるということです。それは正しいアプローチですか、どうすればそれを行うことができますか?
Rails API を調べていたところ、次のことがわかりました。
<%= form_for([@document, @comment]) do |f| %>
...
<% end %>
Where @document = Document.find(params[:id]) and @comment = Comment.new.
これは私が行く必要がある方向ですか?