重定向显示在另一个控制器(Rails)

时间:2014-03-27 23:48:01

标签: ruby-on-rails redirect

我有一个表单允许用户在一组Show方法中发布。发布后,我想重定向到显示新帖子的同一页面。我正在使用以下内容,但我收到以下错误。我不确定为什么@group是nil,因为我已经在我的组控制器的节目中定义了它。

没有路由匹配{:id => nil}缺少必需的密钥:[:id] 对于 redirect_to group_path(@group)

<%=form_for([@post]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
    <div class = "field">
      <%= f.label :event_name %>
      <%= f.collection_select(:event_id, @events, :id, :title) %>
    </div>
    <div class = "field">
      <%= f.text_area :comment, placeholder: "New Post..." %>
    </div>
      <%= f.hidden_field :user_id, value: current_user.id %>
    <%=f.submit "Submit", class: "btn btn-large btn-primary" %>
<%end%>


class PostsController < ApplicationController

  def create
    if @post = Post.create(post_params)
      flash[:success] = "Post Created!"
      redirect_to group_path(@group)
    else
      redirect_to group_url
      flash[:alert] = "Sorry - Post not created."
    end
  end
end


  def show
    @event = @group.events.build
    @post = Post.new
    @events = @group.events.includes(:posts)
    @group = Group.find(params[:id])
  end

2 个答案:

答案 0 :(得分:2)

@group操作中设置create。您尚未为@group分配任何值,这就是您收到错误的原因。

修改

根据您的评论A Group has_many events,您可以按以下方式找到该群组:

@group = Event.find(params[:event_id]).group

答案 1 :(得分:2)

在您的创建操作中,您尝试使用@group实例变量。您尚未在创建操作中对其进行定义,因此如果您想使用它,则需要在那里创建它。由于对create的调用是在一个单独的请求周期中,因此您在show动作中定义的实例变量不可用。

更新: 要获得该组,如果您有event_id和事件belongs_to:group,您可以:

event = Event.find(event_id)
@group = event.group