제가하려는 것은 메모를 추가하고이를 레일스의 클라이언트와 연결할 수 있습니다.Rails Association에서 form_for를 블록에 넣으십시오.
내 클라이언트 모델은 다음과 같습니다
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
을 그리고 내 노트 모델은 다음과 같습니다
내 고객의 내 index.html.erb은 다음과 같습니다class Note < ActiveRecord::Base
attr_accessible :content
belongs_to :client
default_scope order: 'notes.created_at DESC'
validates :client_id, presence: true
end
:
<% @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로 옮겨야한다는 것입니다. 이것이 올바른 접근 방식이며 어떻게해야합니까?
나는 레일 API를 통해 찾고이 발견되었다 :
<%= form_for([@document, @comment]) do |f| %>
...
<% end %>
Where @document = Document.find(params[:id]) and @comment = Comment.new.
이것이 내가 갈 필요가있는 방향을?
클라이언트가 각 블록을 @clients 블록 변수로 지정하고 싶습니다. 그러나 그것이 가능한지 나는 모른다. 한 페이지에 여러 클라이언트가 있기 때문에 load_client 메소드가 작동하지 않으며 어떤 클라이언트가 새 노트와 연관되어 있는지 알아야합니다. –
뷰에 정의 된'client' 변수는 컨트롤러와 아무런 관련이 없습니다. 이들은 완전히 다른 두 컨텍스트입니다. 사실, 변수의 범위는 일반적으로 해당 블록 내에서만 * *입니다. 여러 클라이언트에 대한 메모를 동시에 제출하는 경우이를 다르게 처리해야합니다. 표준 REST 호출은 한 번에 하나의 오브젝트에 대한 호출입니다. – tadman
좋아요, 한 번에 하나씩 제출하고 싶습니다. 일종의 트위터 같아. 나는 트윗 (고객)의 목록을 가지고 있지만, 나는 그들 중 누구에게나 메모를 덧붙일 수있다. 올바른 트윗을 사용하여 올바른 답장을 얻으려면 어떻게해야합니까? –