创造主题行动不起作用。 CRUD

时间:2015-03-19 18:52:50

标签: ruby-on-rails ruby ruby-on-rails-4

我是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。

1 个答案:

答案 0 :(得分:1)

  

为什么创建主题操作会给我错误。 ActiveModel::Forbidden Atrributes

因为您应该在Rails 4.2中使用strong parameters

添加到Subjects_Controller.rb的底部:

def subject_params
  params.require(:subject).permit(:someattributes)
end