編輯我仍然遇到顯示程序的問題。我有大學的名字顯示正確,但由於程序屬於大學,我仍然無法讓這些顯示正確。用戶表有一個program_id,但我仍然無法讓它工作。正確的用戶關聯多個模型
我對Rails相當陌生,並且遇到了我尚未遇到的情況。
我有三種模式:用戶,大學和程序。我希望用戶能夠選擇一所大學和一個計劃,但每所大學必須能夠擁有多個計劃,而計劃必須針對每所大學。 (例如籃子編織可能不在大學A,但在大學B可用)。如果這對於這個問題很重要,我也使用Filterrific gem。
我一直在尋找has_one:通過關聯,並覺得我有95%的路,但只是不能完全到達那裏!
class User < ActiveRecord::Base
has_one :university
has_one :program, through: :university
end
class University < ActiveRecord::Base
belongs_to :program
has_many :users, :through => :programs
end
class Program < ActiveRecord::Base
belongs_to :university
belongs_to :user
end
我的具體問題是,與用戶的特定的大學和程序顯示一個表時,我只得到了ID,而不是特定的大學/程序的名稱。而且 - 我不知道這是相關或完全獨立的 - 但是當我看向編輯用戶,我收到錯誤ActiveRecord::StatementInvalid at /users/6/edit PG::UndefinedColumn: ERROR: column universities.user_id does not exist
我的看法是這樣的:
<% @users.each do |user| %>
<tr>
<td class='center'><%= link_to(user.full_name, user_path(user)) %></td>
<td class='center'><%= user.email %></td>
<td class='center'><%= user.role.capitalize %></td>
<td class='center'><%= user.program_id %></td> <-- Error
<td class='center'><%= user.university_id %></td> <-- Error
</tr>
<% end %>
用戶編輯視圖:
<%= form_for(@user) do |f| %>
<div class="field">
<%= f.label :full_name %><br />
<%= f.text_field :full_name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email %>
</div>
<div class="field">
<%= f.label :university %><br>
<%= f.select :university, options_from_collection_for_select(University.all, 'id', 'name'), {include_blank: true}, {:class => 'select2'} %>
</div>
<div class="field">
<%= f.label :program %><br>
<%= f.select :program, options_from_collection_for_select(Program.all, 'id', 'name'), {include_blank: true}, {:class => 'select2'} %>
</div>
<div class="actions">
<%= f.submit 'Submit', :class => 'btn btn-trilogy' %>
</div>
<% end %>
我的用戶控制器
class UsersController < ApplicationController
def index
@filterrific = initialize_filterrific(
User,
params[:filterrific],
:select_options => {
sorted_by: User.options_for_sorted_by,
with_university_id: University.options_for_select,
with_program_id: Program.options_for_select,
}
) or return
@users = @filterrific.find.page(params[:page])
respond_to do |format|
format.html
format.js
end
end
最後我的模式
ActiveRecord::Schema.define(version: 20170404205100) do
enable_extension "plpgsql"
create_table "programs", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "universities", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.integer "role"
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.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "full_name"
t.integer "university_id"
t.string "time_zone"
t.integer "program_id"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
end
請原諒我,如果有一些代碼丟失,你需要看到。請讓我知道,我不會經常在這裏發帖!
2.3.3 :006 > university.users
NoMethodError: undefined method `klass' for nil:NilClass
Did you mean? class
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/reflection.rb:537:in `source_reflection'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/reflection.rb:728:in `derive_class_name'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/reflection.rb:176:in `class_name'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/reflection.rb:728:in `derive_class_name'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/reflection.rb:176:in `class_name'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/reflection.rb:221:in `klass'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/associations/association.rb:118:in `klass'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/associations/collection_association.rb:41:in `reader'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activerecord-4.1.9/lib/active_record/associations/builder/association.rb:110:in `users'
from (irb):6
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/railties-4.1.9/lib/rails/commands/console.rb:90:in `start'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/railties-4.1.9/lib/rails/commands/console.rb:9:in `start'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/railties-4.1.9/lib/rails/commands/commands_tasks.rb:69:in `console'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/railties-4.1.9/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/railties-4.1.9/lib/rails/commands.rb:17:in `<top (required)>'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:247:in `require'
... 4 levels...
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:241:in `load'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:241:in `block in load'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:232:in `load_dependency'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:241:in `load'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/commands/rails.rb:6:in `call'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/command_wrapper.rb:38:in `call'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application.rb:183:in `block in serve'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application.rb:156:in `fork'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application.rb:156:in `serve'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application.rb:131:in `block in run'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application.rb:125:in `loop'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application.rb:125:in `run'
from /Users/jimmiejackson/.rvm/gems/ruby-2.3.3/gems/spring-1.3.6/lib/spring/application/boot.rb:18:in `<top (required)>'
from /Users/jimmiejackson/.rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/jimmiejackson/.rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from -e:1:in `<main>'
你可以發佈你的用戶編輯代碼來幫助調試你提到的第二個問題。 –
使用用戶編輯代碼編輯我的文章。 –
你可以發佈你的schema.rb文件嗎?看看你的數據庫設置是什麼會很有幫助。 –