将form_for与关系模型一起使用

时间:2015-07-14 05:48:23

标签: ruby-on-rails-4 models form-for relational

我是Rails的新手,我使用form_for创建/编辑新用户。现在我想为每个用户提供更多的自定义,为此我有一个与users表建立关系的新表。

我的用户模型是:

    class User < ActiveRecord::Base
        has_many :links, dependent: :destroy
....

我的链接模型:

class Link < ActiveRecord::Base
    belongs_to :user
    default_scope -> { order(order: :asc) }
    validates :user_id, presence: true
    validates :url, presence: true, length: { maximum: 140 }
    validates :title, presence: true, length: { maximum: 15 }
    ...

它是处理编辑链接的用户控制器(用于编辑的RESTful路由用于编辑用户特定信息,因此我为链接部分设置了新的路径 - 将来还会有其他部分):

路线:

get 'users/editprofile/:id' => 'users#customise', as: :customise
get 'users/editprofile/:id/links' => 'users#links'

控制器:

def links
    @user = User.find(params[:id])
    @links = @user.links
    if !current_user?(@user)
        redirect_to @user
    end
end

迁移文件:

class CreateLinks < ActiveRecord::Migration
  def change
    create_table :links do |t|
      t.string :url
      t.string :title
      t.boolean :icon
      t.string :icon_path
      t.integer :order
      t.references :user, index: true

      t.timestamps null: false
    end
    add_index :links, :user_id
  end
end

然后在我的观点中,我有一个form_for:

<div class="row">
    <div class="col-md-6 dispinline">
        <% @user.links.each do |l| %>
        <%= form_for(l) do |f| %>
            <%= render 'shared/error_messages' %>

            <%= f.label :order %>
            <%= f.text_field :order, class: 'form-control' %>

            <%= f.label :title %>
            <%= f.text_field :title, class: 'form-control' %>

            <%= f.label :url %>
            <%= f.email_field :url, class: 'form-control' %>

            <%= f.label :icon %>
            <%= f.text_field :icon, class: 'form-control' %>

            <%= f.submit "Save changes", class: "btn btn-primary" %>
        <% end %>
        <% end %>
    </div>
</div>

当我跑步时,我得到了这个:

undefined method `link_path' for #<#<Class:0x007f819aa960a0>:0x007f81969f1720>

我知道这些表设置得很好,因为我可以使用它来获取数据:

<% if @user.links.any? %>
            <div class="col-xs-12 col-xs-height links-change">
                <% @user.links.each do |t| %>
                    <p><b><%= t.order %> - Title:</b> <%= t.title %> | <b>URL:</b> <%= t.url %> | <b>Icon:</b> 
<% if t.icon %><%= image_tag(t.icon_path, alt: t.title, size: "30x30") %>
<% else %>No icon set<% end %></p>              
<% end %>

                <div>
                    <p>Active links: <%= @user.link %> | Maximum links: 6</p>

                </div>
            </div>
        <% end %>

这将正确地提供所有信息。

我想要的是一个表单,允许编辑已经与某个用户关联的链接,并创建与该用户关联的新链接或删除链接。

如果这不是正确的方法,我应该创建一个独立的控制器来处理链接创建和使用资源吗?我该怎么做呢?

如果我在控制台中使用:

User.find(1).links 

它给了我所有正确的值。

0 个答案:

没有答案