我是Ruby On Rails的新手,在尝试“创建”新主题时遇到了一些麻烦。我有我的所有链接工作,但当我尝试创建一个新主题时,我得到一个ActiveModel :: Forbidden Atrributes错误。我相信问题是我的routes.rb文件或无法在我的Subject控制器中正确设置params。如果有人知道背后的理论,我希望在我的路线中发生令人困惑的事情。如果,在我的routes.rb文件中写道:
get 'subjects/list' => 'subjects#list'
get 'subjects/new => 'subjects#create'
resources :subjects
然后当我去我的本地主机并输入:localhost:3000 / subjects / new时,它会自动在localhost:3000 / subject / list中创建一个新主题。这意味着我的“创造”行动正在发挥作用,而不是我喜欢它的方式。如果我删除该行
get 'subjects/new' => 'subjects#create'
来自我的routes.rb文件,当我去我的本地主机:3000 /科目/新页面我得到我的表格提交一个新的主题,但当我按下按钮它报告我之前提到的错误。这是我的文件夹中的内容。
Subjects_Controller.rb:
class SubjectsController < ApplicationController
def index
list
render('list')
end
# def index
# show
# render('show')
# end
def list
@subjects = Subject.order("subjects.position ASC")
#@subjects = Subject.all
end
def show
@subject = Subject.find(params[:id])
end
def new
@subjects = Subject.new(:name => 'default')
end
def create
@subject = Subject.new(params[:subject])
if @subject.save
redirect_to(:action => 'list')
else
render('new')
end
end
结束
这是我的new.html.erb文件:
<%= link_to("<< Back to List", {:action => 'list'}, :class => 'back- link') %>
<div class="subject new">
<h2>Create Subject</h2>
<%= form_for(:subject, :url => {:action => 'create'}) do |f| %>
<table summary="Subject form fields">
<tr>
<th>Name</th>
<td><%= f.text_field(:name) %></td>
</tr>
<tr>
<th>Position</th>
<td><%= f.text_field(:position) %></td>
</tr>
<tr>
<th>Visible</th>
<td><%= f.text_field(:visible) %></td>
</tr>
</table>
<div class="form-buttons">
<%= submit_tag("Create Subject") %>
</div>
<% end %>
</div>
这是我的routes.rb文件:
Rails.application.routes.draw do
get 'subjects/list' => 'subjects#create'
resources :subjects
我希望这个问题不会太混乱。真的,我只是想知道为什么创建主题动作给我错误。我只包括关于我的科目/ list =&gt; 'subject #create'来了解为什么这个路由让我创建一个主题,即使它不是我想要的方式。谢谢你的建议!我正在使用rails 4.2 BTW。
答案 0 :(得分:1)
为什么创建主题操作会给我错误。
ActiveModel::Forbidden Atrributes
因为您应该在Rails 4.2
中使用strong parameters
。
添加到Subjects_Controller.rb
的底部:
def subject_params
params.require(:subject).permit(:someattributes)
end