我剛完成了Ruby on Rails 3教程。最後一章相當複雜。整本書的教程基本上創建了一個用戶可以發佈Microposts的網站。另外,每個用戶可以關注任何其他用戶,然後以下用戶的Microposts將顯示在原始用戶的Micropost供稿上。作爲參數值的二維數組
我的問題與爲什麼RelationshipsController內部的創建操作使params變量包含二維數組有關。
這是代碼。
用戶
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password
has_many :microposts, dependent: :destroy
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "Relationship", dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
end
微柱
class Micropost < ActiveRecord::Base
attr_accessible :content
belongs_to :user
end
關係
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
我認爲這是創建二維PARAMS變量的代碼(但是爲什麼呢?)
<%= form_for(current_user.relationships.build(followed_id: @user.id), remote: true) do
|f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
RelationshipsController
class RelationshipsController < ApplicationController
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
end
所以也許我只是回答我自己的問題,但我我從未見過一個params變量的二維數組。有人可以對此有所瞭解嗎?
哦,也許我應該張貼我的routes.rb文件,以及:
SampleApp::Application.routes.draw do
resources :users do
member do
get :following, :followers
end
end
resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
root to: 'static_pages#home'
end
感謝, 麥克
哇,非常感謝你@AJcodez!我一直在討論Rails,幾個月來閱讀了大量的書籍,一直未能到達「aha」時刻。我來自PHP,並且剛剛開始討論Rails(或許我並不像我想象的那麼聰明)。但感謝您的詳細解答。這說得通。 – mikeglaz 2012-07-16 19:24:44
一個簡單的問題,但。 f.hidden_field的followed_id中的值與傳遞到current_user.relationships.build中的@ user.id中的值是否相同? – mikeglaz 2012-07-16 19:34:08
就是這樣 - form_for使您可以訪問表單所用對象的屬性。這就是爲什麼你需要傳遞f並且調用f。{field_type} ... 我認爲你會非常喜歡rails和ruby,如果你還沒有:) – AJcodez 2012-07-16 21:03:14