【发布时间】:2016-04-14 01:26:08
【问题描述】:
我在一个视图中有 2 个表单,如果用户是版主,则显示一个,如果是普通用户,则显示另一个,并且它们都将信息发送到 2 个不同的控制器。我的问题是,如果它是普通用户,为他们显示的表单使用了错误的控制器。
这里是编码
类别/new.html.erb
<% if current_user.mod_of_game? @guide %>
<%= form_for([@guide, @category], url: guide_categories_path) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name, "Category name" %>
<%= f.text_field :name %>
<%= f.submit "Next" %>
<% end %>
<% else %>
<%= form_for([@guide, @check_category], url: check_category_post_path) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name, "Category name" %>
<%= f.text_field :name %>
<%= f.submit "Next" %>
<% end %>
<% end %>
类别控制器
before_action :mod_checker, only: [:create]
def new
@guide = Guide.friendly.find(params[:guide_id])
@category = Guide.friendly.find(@guide.id).categories.new
@check_category = CheckCategory.new
end
def create
@guide = Guide.friendly.find(params[:guide_id])
@category = Guide.friendly.find(@guide.id).categories.new(category_params)
if ((@category.save) && (current_user.mod_of_game? @guide))
flash[:info] = "guide category added succesfully!"
redirect_to @guide
else
render 'new'
end
end
private
def category_params
params.require(:category).permit(:name)
end
def mod_checker
@guide = Guide.friendly.find(params[:guide_id])
unless current_user.mod_of_game? @guide
flash[:danger] = "Sorry something went wrong!"
redirect_to root_path
end
end
check_categories 控制器
def new
end
def create
if @check_category.save
flash[:info] = "Game category added successfully. A mod will apporve it shortly."
redirect_to @guide
else
render 'new'
end
end
private
def check_category_params
params.require(:check_category).permit(:name)
end
路线
resources :guides do
resources :categories, only: [:new, :create, :edit, :update]
end
resources :check_categories, only: [:new, :edit, :update]
match 'guides/:guide_id/categories/' => 'check_categories#create', :via => :post, as: :check_category_post
抱歉编码有点乱,将它放在代码块中的 4 个空格让我的编码间隔很奇怪。
当我有一个非版主用户提交表单时,类别控制器中的 before 操作将运行并且我被重定向到主页。我不知道为什么会这样,因为提交路径应该转到非版主用户的 check_categories 控制器,而 check_categories 控制器没有 before 过滤器。
为什么它在我没有用于该表单的控制器中使用 before 过滤器?我该如何解决?
构建此应用以更好地学习 Rails。所以我只能假设缺乏 Rails 知识导致我做错了。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 model-view-controller controller