rails如何使用关联模型与admin命名空间

时间:2018-03-19 15:06:48

标签: ruby-on-rails ruby database web-development-server

谢谢,我可以在这里提问。我正在使用带有ruby 2.5.0的rails 5.1.4。 我有两个模型A和模型B.

    Model A has_many bs
    Model B belongs_to a

admin-user可以生成新的条目,并且可以生成新的b条目。 no-admin-user可以显示,索引或保留。

的routes.rb

    resources :as, only: [:index, :show] do
      resources :bs, only: [:index, :show, :reserve]
    end
    namespace :admin do
     resources :as, only: [:create, :edit, :update, :destroy,  
       :show] do
       member do
         post :activate
         get :activate
         post :deactivate
         get :deactivate
       end
     resources :bs, only: [:create, :edit, :update, :destroy, :show]
    end
  end

app/views/admin/as/show.html.erb中,您可以看到a的DB Entry的值。所以现在我的想法是要意识到你可以用表格添加b的新B条目。我试过这个show.html.erb

show.html.erb

    <h2><%=t("show")%></h2>
    <p>
      <strong><%=t("title")%></strong>
      <%= @a.title %>
    </p>
    <p>
      <strong><%=t("description")%></strong>
      <%= @a.description %>
    </p>
    <p>
      <strong><%=t("email")%>:</strong>
      <%= @a.email %>
    </p>
    <h2><%=t("entries")%></h2>
    <%= render @a.bs %>
    <h2><%=t("addentry")%></h2>
    <%= form_with(model: [ @a, @admin.bs.build ], local: true) do |f| %>
    <p>
      <%= f.label :title %><br>
      <%= f.text_field :title %>
    </p>
    <p>
      <%= f.label :description %><br>
      <%= f.text_area :description %>
    </p>
    <p>
      <%= f.submit %>
    </p>

将生成表单,但html-sourcecode不显示“admin-route-path”。但我该怎么做?

   <form action="/as/1/bs" accept-charset="UTF-8" method="post"

我如何更改form_with部分,我可以从b中将条目添加到关联模型中?

3 个答案:

答案 0 :(得分:1)

似乎您希望表单点击网址/admin/as/bs。 要构建指向命名空间控制器的链接,可以使用以下格式:

link_to [:admin, @a, @b], 'A admin show'
link_to admin_as_bs_path(@a, @b), 'A admin show'

同样适用于表格

form_for [:admin, @a, @b] do ...
form_for @a, url: admin_as_bs_path(@a, @b)

路由助手的名称可能有误。检查rake routes的输出。

答案 1 :(得分:0)

要获取您正在寻找的路线,您需要拥有嵌套资源。你可以找到一个很好的解释here

答案 2 :(得分:0)

我找到了相关模型的解决方案,它运行正常。谁能证实这一点。感谢

<%= form_with(model: [:admin, @a,B.new ], local: true) do |f| %> <% end %>