Rails Public Activity Gem - 创建动作控制器后
Rails Public Activity Gem - after create action controller
我正在尝试用 Rails 4.
制作一个应用
我已经安装了 public_activity gem.
我遵循了 Ryan Bates Railscast 并采用了基于控制器的方法,以及较轻的通用选项(与跟踪模型相反)。
在我的 activities_controller 我有:
class ActivitiesController < ApplicationController
def index
@activities = PublicActivity::Activity.order("created_at desc")
end
end
在我的 project.rb 中,我有:
include PublicActivity::Common
在我的项目控制器中,创建动作,我有:
def create
logger.debug "xxx create project"
#authorise @project
@project = Project.new(project_params)
@project.creator_id = current_user.id
@project.users << current_user
@project.create_activity :create, owner: current_user
respond_to do |format|
if @project.save
format.html { redirect_to @project }
format.json { render action: 'show', status: :created, location: @project }
else
format.html { render action: 'new' }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
在我的 activity 视图 - 索引中,我有:
<% @activities.each do |activity| %>
<div class="col-md-4">
<div class="indexdisplay">
<span class="indexheading">
<%= link_to activity.owner.name, activity.owner if activity.owner %>
</span>
<span class="indexsubtext">
<%= render_activity activity %>
</span>
在我的 public activity(查看文件夹)/project/_create.html.erb 中,我有:
<% if activity.trackable %>
<%= link_to activity.trackable.name, activity.trackable %>
<% else %>
which has since been removed
<% end %>
当我尝试这个时,它给我一个空白页面(没有创建新的活动)。当我尝试创建一个新项目时,我无法提交表单,因为出现此错误:
ActiveRecord::RecordNotSaved at /projects
You cannot call create unless the parent is saved
问题出在我的项目控制器的创建操作中的这一行。
@project.create_activity :create, owner: current_user
保存项目后,是否有其他地方可以将其放入控制器中以使其成为运行?我已经阅读了有关回调的信息,但它们需要在模型中,我想从控制器中保留此过程 运行ning。
作为错误状态,您正在尝试创建一个 activity
到一个未保存的 Project
。保存 @project
后移动 activity
的创建:
def create
logger.debug "xxx create project"
#authorise @project
@project = Project.new(project_params)
@project.creator_id = current_user.id
respond_to do |format|
if @project.save
@project.users << current_user
@project.create_activity :create, owner: current_user
format.html { redirect_to @project }
format.json { render action: 'show', status: :created, location: @project }
else
format.html { render action: 'new' }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
我正在尝试用 Rails 4.
制作一个应用我已经安装了 public_activity gem.
我遵循了 Ryan Bates Railscast 并采用了基于控制器的方法,以及较轻的通用选项(与跟踪模型相反)。
在我的 activities_controller 我有:
class ActivitiesController < ApplicationController
def index
@activities = PublicActivity::Activity.order("created_at desc")
end
end
在我的 project.rb 中,我有:
include PublicActivity::Common
在我的项目控制器中,创建动作,我有:
def create
logger.debug "xxx create project"
#authorise @project
@project = Project.new(project_params)
@project.creator_id = current_user.id
@project.users << current_user
@project.create_activity :create, owner: current_user
respond_to do |format|
if @project.save
format.html { redirect_to @project }
format.json { render action: 'show', status: :created, location: @project }
else
format.html { render action: 'new' }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
在我的 activity 视图 - 索引中,我有:
<% @activities.each do |activity| %>
<div class="col-md-4">
<div class="indexdisplay">
<span class="indexheading">
<%= link_to activity.owner.name, activity.owner if activity.owner %>
</span>
<span class="indexsubtext">
<%= render_activity activity %>
</span>
在我的 public activity(查看文件夹)/project/_create.html.erb 中,我有:
<% if activity.trackable %>
<%= link_to activity.trackable.name, activity.trackable %>
<% else %>
which has since been removed
<% end %>
当我尝试这个时,它给我一个空白页面(没有创建新的活动)。当我尝试创建一个新项目时,我无法提交表单,因为出现此错误:
ActiveRecord::RecordNotSaved at /projects
You cannot call create unless the parent is saved
问题出在我的项目控制器的创建操作中的这一行。
@project.create_activity :create, owner: current_user
保存项目后,是否有其他地方可以将其放入控制器中以使其成为运行?我已经阅读了有关回调的信息,但它们需要在模型中,我想从控制器中保留此过程 运行ning。
作为错误状态,您正在尝试创建一个 activity
到一个未保存的 Project
。保存 @project
后移动 activity
的创建:
def create
logger.debug "xxx create project"
#authorise @project
@project = Project.new(project_params)
@project.creator_id = current_user.id
respond_to do |format|
if @project.save
@project.users << current_user
@project.create_activity :create, owner: current_user
format.html { redirect_to @project }
format.json { render action: 'show', status: :created, location: @project }
else
format.html { render action: 'new' }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end