2011-11-24 5 views
1

문제 모델과 설명 모델이 있습니다. 문제 # show view에는 의견 양식이 있습니다. 문제 # show controller 액션에서 폼의 @comment를 만든 다음 comment #에 컨트롤러 액션을 생성하여 실제로 db에 코멘트를 저장하고 저장합니다. 그러나 @comment 매개 변수가 comment # create 액션에 전달되면 필자는 필요한 issue_id 정보를 더 이상 가지지 않습니다. 그 정보를 어떻게 전달합니까? 여기 내 파일은 다음과 같습니다form_for에서 다른 컨트롤러로 매개 변수를 전달하려면 어떻게합니까?

<%= form_for @comment do |f| %> 
    <%= render 'comment_fields', :f => f %> 
    <%= f.submit "Submit" %> 
<% end %> 

문제 컨트롤러 :

def show 
    @issue = Issue.find(params[:id]) 
    @votes = Votership.where(:issue_id => @issue.id) 
    @current_user_vote = @votes.where(:user_id => current_user.id).first 
    @comment = Comment.new 
    end 

및 주석 컨트롤러 :

def create 
    @comment = Comment.new(params[:comment]) 
    @comment.save 
    redirect_to :back 
    end 

답변

0

당신은 당신이 show 행동

@comment를 생성하는 방식을 수정해야
def show 
    @issue = Issue.find(params[:id]) 
    @votes = Votership.where(:issue_id => @issue.id) 
    @current_user_vote = @votes.where(:user_id => current_user.id).first 
    @comment = @issue.comments.build # assigns issue_id to comment 
end 
당신이 @comment의 양식을 렌더링 할 때

는 이제 issue_id는 숨겨진 양식 입력


이 질문에 관련이 존재해야하지만, 또한 당신이 @current_user_vote

을로드하는 방법을 알아 차리지 해요
@current_user_vote = @votes.where(:user_id => current_user.id).first 
당신은 아마해야

이 같이

@current_user_vote = current_user.votes.first 
+0

문제 # show view에 대한 의견을 작성하여이 같은 것을 시도했지만 필요한 적절한 변수가 포함되어 있습니다. 그러나 Comment.new (params [: comment])를 수행했을 때 comments # new 액션을 만들었을 때 (# 새 Comment를 작성했기 때문에 믿을 수 있었고 params에 var를 포함하지 않았기 때문에 # :논평]). 내가 당신의 코드를 시험해 보았을 때, build_comment가 나에게 오류를 주었다 : 정의되지 않은 메소드'build_comment ' –

+0

당신은 어떤 버전의 레일즈를 사용하고 있는가? 나는 나의 대답을 업데이트했다. –

+0

버전 3.1 ... 내 의견 컨트롤러에 issue_id를 전달하는 방법이 필요합니다. 나는 그것과 함께 숨겨진 필드를 전달함으로써 거의 작동하게 만들었습니다 : <% = hidden_field (: issue_id, @ issue.id) %> 그러나 문제를 전달하기 때문에 issue_id와 함께 이것을 구현했습니다. key = @ issue.id 및 value = nil. –

0

내가 잘 이해한다면, n 문제는 많은 의견을 가질 수 있으며 의견은 문제에 속합니다.

# config/routes.rb 
# Nest the comment under the issue 
resources :issues do 
    resources :comments, only[:create] 
end 

# app/models/issue.rb 
has_many :comments 

# app/models/comment.rb 
belongs_to :issue 

# app/controllers/issues_controller.rb 
def show 
    @issue = Issue.find params[:id] 
    ... 
end 

# app/views/issues/show.html.erb 
<%= form_for [@issue, @issue.comments.build] do |f| %> 
.... 
<% end %> 

# app/controllers/comments_controller.rb 
def create 
    @issue = Issue.find params[:issue_id] 
    @comment = @issue.comments.build params[:comment] 
    if @comment.save 
    redirect_to @issue 
    else 
    render 'issues/show' # => it will know which issue you are talking about, don't worry 
    end 
end 

# or if you don't need validation on comment: 
def create 
    @issue = Issue.find params[:issue_id] 
    @issue.comments.create params[:comment] 
    redirect_to @issue 
end 

문제 # 좀 이상하게 보입니다.

def show 
    @issue = Issue.find params[:id] 
    @votes = @issue.voterships 
    @current_user_vote = current_user.votes.first 
    # maybe you want to list all the comments: @comments = @issue.comments 
end 
+0

네,하지만 코멘트를위한 리소스가 없습니다 ... 필요하지 않습니다. 이 작동하지 않습니다 –

+0

나는 그것에 대한 리소스를 추가했습니다. 그러나 댓글은 앱에 속하는 문제에 속합니다. 따라서 이중 중첩 된 자원이 있습니다. 내가 어떻게 그럴 수 있니? –

+0

하지만 나머지 코드를 사용하여 앱/문제/의견이 필요하다는 것을 알았습니까? –

관련 문제