STI的路由问题

时间:2014-01-23 06:57:54

标签: ruby-on-rails sti

我已宣布工作中的STI

class Work < ActiveRecord::Base
    validates :title, presence: true
    validates :visibility, presence: true
    belongs_to :category
end


class Story<Work

end

class Poem<Work
end

表格代码:

    <div class="panel panel-blue margin-bottom-40">
        <div class="panel-heading">
            <h3 class="panel-title"><i class="icon-tasks"></i> Item Details</h3>
        </div>
        <div class="panel-body">                                                      

           <%= form_for(@work, :html =>{:class =>"margin-bottom-40  new_item ",:multipart => true}) do |f| %>
                  <% if @work.errors.any? %>
                    <div id="error_explanation">
                      <h2><%= pluralize(@work.errors.count, "error") %> found </h2>

                      <ul>
                      <% @work.errors.full_messages.each do |msg| %>
                        <li><%= msg %></li>
                      <% end %>
                      </ul>
                    </div>
                  <% end %>


    <div class="form-group">
      <%= f.label "Title",:class=>"control-label" %>
          <div class="controls">
        <%= f.text_field :title,:class=>"form-control",:placeholder=>"Title of the story/poem" %>
        <div class="description">
          <div class="">
            <strong>Enter a suitable title for your story/poem
            </strong>
          </div>

        </div>
      </div>

    </div>
     <div class="form-group">
      <%= f.label :type,:class=>"control-label" %>
          <div class="controls">
        <%= f.select :type,{"Story"=>"Story","Poem"=>"Poem"},{},:class=>"form-control",:placeholder=>"Story/Poem" %>
        <div class="description">
          <div class="">
            <strong>Is it a story or a poem?
            </strong>
          </div>

        </div>
      </div>

    </div>
   <%
    visibilities=["Me Only","Anyone with link","Logged In Users","Everyone"]
   %>

    <div class="form-group">
      <%= f.label :visibility,:class=>"control-label" %>
          <div class="controls">
        <% [ 3,2, 1, 0 ].each do |option| %>
            <br><%= radio_button_tag :visiblity, option, @visibility == option %>
            <%= label_tag "visibility_#{option}", visibilities[option].humanize %>
        <% end %>

        <div class="description">
          <div class="">
            <strong>
            </strong>
          </div>

        </div>
      </div>

    </div>
     <div class="form-group">
      <%= f.label :category_id,:class=>"control-label" %>
          <div class="controls">
         <%= f.collection_select :category_id,Category.all,:id,:name,{},:class=>"form-control" %>

        <div class="description">
          <div class="">
            <strong>
              Type your story/Poem here
            </strong>
          </div>

        </div>
      </div>

    </div>

  <div class="form-group">
      <%= f.label :content,:class=>"control-label" %>
          <div class="controls">
         <%= f.text_area :content,:class=>"form-control" %>

        <div class="description">
          <div class="">
            <strong>
            </strong>
          </div>

        </div>
      </div>

    </div>

    <div class="actions">
      <%= f.submit :class=>"btn btn-primary" %>
      <%= link_to 'Back', works_path,:class=>"btn" %>
    </div>
  <% end %>

我有脚手架用于接受故事和诗的参数Type。当我最初提交表单时,我会找到一个找不到story_path的错误,所以我将故事和诗歌路径映射如下:

  resources :stories, :controller => 'works'
  resources :poems, :controller => 'works'

因此,当我第一次提交时,表单会显示验证错误。当我在更正验证后再次提交时,我得到一个例外

ActionController::ParameterMissing in WorksController#create
in this line:
      params.require(:work).permit(:title, :type, :visibility, :category_id, :content)

我认为这是因为它现在将所有字段重命名为story []而不是work []

如何解决这个问题,从更大的角度来看,如何让STI在同一个控制器上工作。我只是想能够使用Poem.all和Story.all来获取记录。 Submisson目前通过相同的界面

工作

我允许用户选择表单中的工作类型。

0 个答案:

没有答案