我是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
它给了我所有正确的值。