我不確定我在這裏做錯了什麼。基本上,用戶只能由現有用戶創建,他們只能在現有用戶所在的公司中。因此,我希望f.select for:company來自current_user.companies。模型通過表「users_companies」加入。Rails 4表格從關係模型中選擇
形式:
<div class="row">
<h3>Add User</h3>
<div class="column">
<%= simple_form_for @user do |f| %>
<%= f.input :name %>
<%= f.input :email %>
<%= f.select(:company_id, @companies.map {|company| [company,company]}) %>
<%= f.select(:role, User.roles.keys.map {|role| [role,role]}) %>
<%= f.input :password %>
<%= f.input :password_confirmation %>
<%= f.button :submit %>
<% end %>
</div>
控制器:
def new
@user = User.new
@companies = current_user.companies
end
def create
@user = User.new(params[:user].permit(:name, :company, :email, :role, :password, :password_confirmation))
authorize @user
@companies = current_user.companies
if params[:user][:password].blank?
params[:user].delete(:password)
params[:user].delete(:password_confirmation)
end
respond_to do |format|
if @user.save
format.html { redirect_to users_path, notice: 'User was successfully created.' }
else
format.html { render action: "new" }
end
end
end
模式:
ActiveRecord::Schema.define(version: 20140620190817) do
create_table "companies", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "groups", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "company_id"
t.integer "tag_id"
t.integer "q_rcode_id"
t.integer "page_id"
end
create_table "pages", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "company_id"
t.integer "group_id"
t.integer "tag_id"
t.integer "q_rcode_id"
end
create_table "q_rcodes", force: true do |t|
t.string "url"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "company_id"
t.integer "group_id"
t.integer "page_id"
end
create_table "tags", force: true do |t|
t.string "url"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "company_id"
t.integer "group_id"
t.integer "page_id"
end
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
t.integer "role"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
create_table "users_companies", id: false, force: true do |t|
t.integer "user_id"
t.integer "company_id"
end
add_index "users_companies", ["user_id", "company_id"], name: "index_users_companies_on_user_id_and_company_id"
add_index "users_companies", ["user_id"], name: "index_users_companies_on_user_id"
end
我得到這樣的:沒有這樣的列:companies.user_id:SELECT 「公司」。* FROM「companies」WHERE「companies」。「user_id」= 1 – socialconquest 2014-11-06 19:09:58
我添加了模式 - 我認爲這是問題來自何處,它們通過users_companies相關。 – socialconquest 2014-11-06 19:15:44
我很抱歉,給了你錯誤的信息。由於該關聯是'通過'user_company,所以公司中不會有user_id。我會解決我的答案。 – septerr 2014-11-06 19:30:56