Rails simple_form object_id关联

时间:2016-07-14 09:36:38

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 simple-form

在我的应用程序中,我有很多模型: (产品belongs_to创建者,创建者belongs_to compagnie,compagnies belongs_to SEO,SEO属于用户)

在我的第一个Seoscontroller中我有:

def create
 @seo = current_user.seos.build(seo_params)
   if @seo.save
    redirect_to search_path
   else
    render :new
   end
end

(控制器工作找到!)

在Compagniescontroller中,我认为(但不是工作:[)

def create
  seo = Seo.find(params[:seo_id])
   @compagnie = seo.compagnies.build(compagnie_params)
  if @compagnie.save
   redirect_to search_path
  else
   render :new
  end
end

和我的simple_form ....

<%= simple_form_for @compagnie(seo_id: seo.id) do |f| %>
<% end %>

我搜索一个解决方案,将我的模型id关联到控制器和simple_form_for

(我的rails错误:/ compagnies / new的RuntimeError 协会:未找到seo_id)

修改

  create_table "seos", force: :cascade do |t|
   t.string   "name"
   t.string   "surname"
   t.datetime "created_at", null: false
   t.datetime "updated_at", null: false
   t.integer  "user_id"
   t.index ["user_id"], name: "index_seos_on_user_id", using: :btree
  end

  create_table "compagnies", force: :cascade do |t|
    t.string   "compagnie_name"
    t.string   "address"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
    t.integer  "seo_id"
    t.integer  "user_id"
    t.index ["seo_id"], name: "index_compagnies_on_seo_id", using: :btree
    t.index ["user_id"], name: "index_compagnies_on_user_id", using: :btree
  end

用户模型

class User < ApplicationRecord

  has_many  :seos
  has_many  :compagnies
end

Seo模型

class Seo < ApplicationRecord

    belongs_to  :user
    has_many    :compagnies

    validates :name,        presence: true
    validates :surname,      presence: true
end

compagnie model

class Compagnie < ApplicationRecord

     belongs_to :user
     belongs_to :seo


    validates :address,                 presence: true
    validates :compagnie_name,          presence: true
end

表格为Seo

            <%= simple_form_for @seo do |f| %>
        <div class="search__form--left split-panel--left">
            <div class="search__title">
                Seo:
            </div>


                <div class="search__section search__section--od">

                    <!--Name-->
                    <div class="search__field search__departure grouped-input--top">
                        <%= f.input :name, placeholder: "name", :input_html => { :class => "add__name-input ember-text-field textfield station-text-field empty station-text-field-- add__input empty" }, label: false %>
                    </div>

                    <!--Surname-->
                    <div class="search__field search__arrival grouped-input--bottom">
                        <%= f.input :surname, placeholder: "prenom", :input_html => { :class => "add__name-input ember-text-field textfield station-text-field empty station-text-field-- search__input empty" }, label: false %>
                    </div>
                </div>

                <!--Button-->
                <div class="search__button progress-button">
                    <%= f.button :submit, "Add", class: "button progress-button--button" %>
                </div> 

        </div>
    <% end %>

compagnie的表格

    <%= simple_form_for @compagnie(seo_id: seo.id) do |f| %>
        <div class="search__form--left split-panel--left">
            <div class="search__title">
                Seo:
            </div>


                <div class="search__section search__section--od">

                    <!--Name-->
                    <div class="search__field search__departure grouped-input--top">
                        <%= f.input :address, placeholder: "address", :input_html => { :class => "add__name-input ember-text-field textfield station-text-field empty station-text-field-- add__input empty" }, label: false %>
                    </div>

                    <!--Surname-->
                    <div class="search__field search__arrival grouped-input--bottom">
                        <%= f.input :compagnie_name, placeholder: "compagnie_name", :input_html => { :class => "add__name-input ember-text-field textfield station-text-field empty station-text-field-- search__input empty" }, label: false %>
                    </div>
                </div>

                <!--Button-->
                <div class="search__button progress-button">
                    <%= f.button :submit, "Add", class: "button progress-button--button" %>
                </div> 

        </div>
    <% end %>

由于

1 个答案:

答案 0 :(得分:0)

我认为它应该在此行引发语法错误

<%= simple_form_for @compagnie(seo_id: seo.id) do |f| %> 

但不知怎的,它没有。如果您想将seo.id传递给表单网址,则必须将其放在:url参数中。 Rails FormHelper使用polymorphic_url生成表单操作网址。看看它的文档,你会发现为什么你的代码不起作用。在您的情况下,如果您的路线文件类似于:

resources :compagnies

那么表格应该是

<%= simple_form_for @compagnie, url: compagnies_path(seo_id: seo.id) do |f| %>

如果您的路线是这样的(推荐)

resources :seos do
  resources :compagnies
end

那么表格应该是

<%= simple_form_for [@seo, @compagnie] do |f| %>

希望得到这个帮助。