0

概念的に単純に見えることをしようとしていますが、うまくいきません。これが私がやろうとしていることです:

/users/index ページに単純な「検索」フォームがあります。現在のユーザーが検索フィールドに入力すると、jQuery Tokeninput を利用してユーザー (名前/ユーザー名) をオートコンプリートします。私がしたいのは、ユーザーに名前を入力させ、リストからユーザーを選択してから、「送信」をクリックして、選択したユーザーのプロファイル (/users/:id/ - Users#show) に移動させることです。user_id を :user_token として送信するように jQuery Tokeinput を構成しました。

私はこれを機能させることができないようです。オートコンプリート部分は正しく機能しますが、入力したユーザーのプロフィールが表示されるように「送信」する方法がわかりません。

フォームの「送信」ボタンを押すと、次のようになります (ターミナルの開発ログから取得)。

Started PUT "/users/2" for 127.0.0.1 at 2012-05-08 11:19:56 -0400
  Processing by UsersController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"blah blah=", "user"=>{"user_token"=>"41"}, "commit"=>"Go to profile", "id"=>"2"}
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", "2"]]
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1
Completed 500 Internal Server Error in 83ms

NoMethodError (undefined method `downcase!' for nil:NilClass):
  app/controllers/users_controller.rb:119:in `update'

したがって、ユーザーコントローラーで更新アクションを呼び出しています。「@user」が既に存在しているためだと思います(具体的には、送信ボタンをクリックするのは current_user です)。

画面に次のように表示されます。

一番上に表示されるパスは .../users/2 (現在のユーザーの ID) で、ブラウザには次のように表示されます。

UsersController#update の NoMethodError

未定義のメソッド `downcase!' nil:NilClass の場合

ユーザーコントローラーで「更新」アクションを実行しようとしていて、「ダウンケース!」があるため、それを取得しています。更新アクションの開始時にパラメーターの 1 つを呼び出します。そのパラメーター ([:user][:email]) は、私が送信しているフォームにないため、明らかに存在しません。

私が実際にやりたいことは、「/users/41」(params[:user][:user_token] として渡された ID を持つユーザーの表示ページ) に移動することです。どうすればいいですか?

関連するすべてのコードは次のとおりです。

#users_controller.rb#Index

def index
  @title = "All users"
  @label = "All users"
  @list_users = User.order(:name).page(params[:page]) #generates users shown on index page
  @user = current_user

  # This is used to populate the autocomplete field in the little search form
  @users = User.where("LOWER(name) like ? OR LOWER(username) like ?", "%#{params[:q].downcase}%", "%#{params[:q].downcase}%").order('name ASC').limit(10) if params[:q]

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @users, :only => [:id, :name, :username] }
  end
end

私のルート...

#routes.rb 
resources :comments
resources :invitations
resources :sessions, :only => [:new, :create, :destroy]
resources :shares, :controller => "item_shares", :as => "item_shares" do
  resources :comments
end
resources :posts, :controller => "item_posts", :as => "item_posts" do
  resources :comments
end
resources :items
resources :relationships, only: [:create, :destroy]
resources :users do
  member do
    get :following, :followers
  end
end
resources :password_resets

match '/signup',  :to => 'users#new'
match '/signup/:invitation_token' => 'users#new', :as => :signup_with_invitation
match '/signin',  :to => 'sessions#new'
match '/signout', :to => 'sessions#destroy'
match '/invite',  :to => 'invitations#new'

match '/users/:id/shared', :to => 'users#shared'
match '/users/:id/received', :to => 'users#received'
match '/users/:id/saved', :to => 'users#saved'
match '/users/:id/posts', :to => 'users#posts'
match '/reciprocal_followers', :to => 'users#reciprocal_followers' 

root :to => 'pages#home'

これが私のフォームです(jQuery Tokeninputは機能しますが、これは間違いなく機能しません):

#_user_search_form.html.erb
<div class="form">
<span class="form-label-right round-bottom-left-5 round-top-right-5 gray-gradient">Find someone</span>
<%= form_for @user, :action => "show" do |f| %>

    <div class="field">
        <%= f.label :user_token, "Name or Username" %></br>
        <%= f.text_field :user_token, :placeholder => 'John Doe or JohnDoe123', "data-pre" =>  (@pre_populate_data.to_json(:only => [:id, :name, :username]) unless @pre_populate_data.nil?)  %>
    </div>

    <div class="actions">
        <%= f.submit "Go to profile" %>
    </div>
<% end %>
</div>

私のユーザーモデルの関連部分は次のとおりです。

#user.rb
attr_accessible  :user_token

attr_reader :user_token
4

1 に答える 1

0
<% form_for @project, :url => { :controller => "project", :action => "thumbnail_save" } do |form| %>
....
<% end %>

また、このようなものを設定ファイルに書き込みます(一番上に置きます)

get "users/show"

それでもうまくいかない場合は、これを試してください。(以下を機能させるには、フォームを変更する必要がある場合があります)

match "project/thumbnail_save", :to => "project#thumbnail_save"

他に問題があればお知らせください。

于 2012-06-29T11:23:08.620 に答える