저는 Rails를 처음 사용하고 대학생 (교사 및 학생)이 게시물을 작성하고 의견을 작성할 수있는 응용 프로그램을 작성합니다. 나중에 중첩 (조상)과 점 시스템을 추가하고 싶습니다.form_for 태그 및 중첩 된 양식 - 컨트롤러의 사용자 정의 메서드 사용
게시물, 댓글 및 회원 모델이 있습니다. Post 모델은 Scaffolding을 통해 만들어졌으며 Member 모델은 Devise의 도움을 받아 만들어졌으며 Comment는 단순한 모델입니다.
게시물의 내 페이지에서 게시물 아래에 댓글을 달고 싶습니다. 약간의 진전을 보였습니다. (덕분에 꽤 많이 알게되었습니다.)하지만 지금은 언제든지 문제가 붙어 있습니다. 레일즈가 편집 페이지로 리디렉션하고있는 빈 코멘트를 게시하려고 시도했습니다. 레일을 쇼 페이지에서만 유지하고 오류를 표시하도록 이것을 변경하는 방법은 무엇입니까?
이 기사에서는 post_controller.rb에서 'update_comments'라는 새 메서드를 만들고 아래 코드에서 forms_for 태그 특성을 수정하려고 시도했지만 제출할 때 라우팅 오류가 발생합니다.
응용 프로그램/모델/member.rb
class Member < ActiveRecord::Base
#Associations
belongs_to :department
has_one :student, :dependent => :destroy
accepts_nested_attributes_for :student
has_one :nstudent, :dependent => :destroy
accepts_nested_attributes_for :nstudent
has_many :posts, :dependent => :destroy
has_many :comments, :dependent => :destroy
end
응용 프로그램/모델/post.rb
class Post < ActiveRecord::Base
#Associations
belongs_to :member
has_many :comments, :dependent => :destroy
accepts_nested_attributes_for :comments
end
응용 프로그램/모델/comment.rb
class Comment < ActiveRecord::Base
# Associations
belongs_to :member
belongs_to :post
validates_presence_of :content
end
설정/경로. rb
Urdxxx::Application.routes.draw do
devise_for :members
resources :posts do
member do
get 'update_comment'
end
end
root :to => 'posts#index'
을 만들기에
http://i.stack.imgur.com/TBgKy.png
:
응용 프로그램/컨트롤러/posts_controller.rb
class PostsController < ApplicationController
# Devise filter that checks for an authenticated member
before_filter :authenticate_member!
# GET /posts
# GET /posts.json
def index
@posts = Post.find(:all, :order => 'points DESC')
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
...
# GET /posts/1/edit
def edit
@post = Post.find(params[:id])
end
# POST /posts
# POST /posts.json
def create
@post = Post.new(params[:post])
@post.member_id = current_member.id if @post.member_id.nil?
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render json: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
# PUT /posts/1
# PUT /posts/1.json
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
# DELETE /posts/1
# DELETE /posts/1.json
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.html { redirect_to posts_url }
format.json { head :no_content }
end
end
# Not made by scaffold
def update_comment
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to @post, notice: 'Comment was successfully created.' }
format.json { head :no_content }
else
format.html { render action: "show" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
end
응용 프로그램/조회/게시물/show.html.erb
<p> Have your say </p>
<%= form_for @post, :url => {:action => 'update_comment'} do |p| %>
<%= p.fields_for :comments do |c| %>
<!-- Following 3 lines saved my life -->
<% if c.object.new_record? %>
<%= c.text_area :content, :rows => 4 %>
<%= c.hidden_field :member_id, value: current_member.id %>
<% end %>
<% end %>
<%= p.submit "Reply" %>
<% end %>
내 공연 페이지의 이미지 댓글 : http://i.stack.imgur.com/JlWeR.png
업데이트 :
Ken이 말한 것을 뒤돌아 보아 여기에서 변경했습니다. 나는 그것이 어떻게 작동하는지 모르지만 지금은 효과가있다.
는응용 프로그램/컨트롤러/posts_controller.rb는
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { head :no_content }
elsif :comments
format.html { render action: "show" }
format.json { render json: @post.errors, status: :unprocessable_entity }
else
format.html { render action: "edit" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end