2015-05-21 64 views
0

我正在嘗試添加搜索欄。我也設定了路徑。但每次我嘗試點擊搜索時,它都會指示我出現此錯誤。這段代碼中的錯誤是什麼?無法爲InboxController找到操作'搜索'

這是我的Inbox_Controller文件。它表示在InboxController中找不到「搜索」操作。

class InboxController < ApplicationController 
before_action :valid_membership 
before_action :change_password_next_login 
before_action :agreed_to_terms 
before_action :allowed_send_mail? 

layout 'inbox' 

def bulk 
puts params 

ids = params[:bulk_ids] 

if ids 
    params[:commit] 

    case params[:commit] 
    when 'Archive' 
     ids.each do |id| 
     message = Message.find(id) 
     message.archived = true 
     message.save() 
     end 
    when 'Restore' 
     ids.each do |id| 
     message = Message.find(id) 
     message.archived = false 
     message.save() 
     end 
    else 
     puts 'invalid action!!' 
    end 


    if params[:folder] != '' 
    redirect_to inbox_index_path(folder: params[:folder]) 
    else 
    redirect_to inbox_index_path 
    end 
else 
    flash[:alert] = t('errors.inbox.no_emails_selected') 
    redirect_to :back 
end 
end 

def index 

per_page = 10 
page = params[:page] ? params[:page] : 1 
@inbox = Inbox.search(params[:search]) 
    case params[:folder] 
    when 'archive' 
    @messages = current_user.archived_messages(page, per_page) 
    when 'drafts' 
    @messages = current_user.draft_messages(page, per_page) 
    when 'sent' 
    @messages = current_user.sent_messages(page, per_page) 
    else 
    @messages = current_user.received_messages(page, per_page) 
    end 

    end 

    def reply 
    original = Message.find(params[:id]) 
    @quoted = "\n\nOn #{original.sent_time.strftime("%m/%d/%y %-I:%M %p")}, # {original.from.full_name} wrote:\n----------------\n#{original.body}" 
@message = Message.new(
    :parent => original, 
    :to => original.from, 
    :subject => "RE: #{original.subject}", 
    :body => @quoted, 
) 

render :compose 
end 

def move 
@message = Message.find(params[:id]) 
folder = params[:destination] 

case folder 
    when 'archive' 
    @message.archived = true 
    else 
    @message.archived = false 
end 

unless @message.save 
    puts @message.errors.full_messages 
end 

redirect_to inbox_index_path(folder: folder) 
end 

def show 
@message = Message.find(params[:id]) 

if [email protected]? && @message.to == current_user 
    @message.read_time = DateTime.now 
    unless @message.save 
    puts @message.errors.full_messages 
    end 
end 
end 

def edit 
@message = Message.find(params[:id]) 
@message.to_name = @message.to.full_name 
render 'compose' 
end 

    def compose 
    @message = Message.new 
    if(params[:id]) 
    @message.to = Mentor.find(params[:id]) 
    end 

    end 

    def create 
    if(params[:message] && !params[:message][:id].empty?) 
     @message = Message.find(params[:message][:id]) 
     @message.assign_attributes(message_params) 
    else 
     @message = Message.new(message_params) 
    end 

    if params[:parent_id] && !params[:parent_id].empty? 
    @message.parent = Message.find(params[:parent_id]) 
    @message.replied_to_time = Time.now 
    end 
    @message.from = current_user 

    draft = params[:draft] 

    if draft 
     @message.draft = true 
    else 
     @message.sent_time = Time.now 
     @message.draft = false 
    end 

    # puts @message.as_json 
    if can_send_mail 
     if @message.save 
     if !draft 
      if current_user_or_guest.mentee? 
      current_user.credits += -1 
      current_user.save 
      end 

     UserMailer.inmail_notification(@message).deliver 
     end 

     redirect_to inbox_index_path(folder: draft ? 'drafts' : 'inbox'), notice: "Message successfully #{draft ? 'saved' : 'sent'}." 
     else 
     flash.now[:alert] = 'All email fields need to be filled out prior to sending/saving.' 
     render 'compose' 
     end 
    else 
     flash.now[:alert] = 'You do not have enough credits to send any more InMail to Game Changers.' 
     render 'compose' 
    end 
    ActivityLog.create(userid: current_user.id, points: 500, typeof: "message") 
    end 

    def allowed_send_mail? 
    unless !current_user.admin? 
     msg = "You are not authorized to access this page!" 
    show_error(msg) 
    end 
    end 

    def profile_complete 
    return true if current_user.mentor? 

    unless current_user.profile_complete? 
     flash[:alert] = t('errors.inbox.incomplete_profile') 
     redirect_to edit_user_registration_path 
    end 
    end 

    def message_params 
    params.require(:message).permit(:id, :to_name, :to_id, :subject, :body) 
    end 
end 

這是我的相關index.erb.html文件。

<%= form_tag inbox_search_path, :method => 'get' do %> 
    <p> 
     <%= search_field_tag :Search, params[:search] %> 
     <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

這是我相關的routes.rb文件:

get 'inbox' => 'inbox#index', :as => 'inbox_index' 
get 'inbox/show/:id' => 'inbox#show', :as => 'inbox_show' 
get 'inbox/compose' => 'inbox#compose', :as => 'inbox_compose' 
get 'inbox/compose/:id' => 'inbox#compose', :as => 'inbox_compose_to' 
get 'inbox/edit/:id' => 'inbox#edit', :as => 'inbox_edit' 
get 'inbox/move' => 'inbox#move', :as => 'inbox_move' 
get 'inbox/reply' => 'inbox#reply', :as => 'inbox_reply' 
get 'inbox/search' => 'inbox#search', :as => 'inbox_search' 
post 'inbox/create' => 'inbox#create' 
post 'inbox/bulk' => 'inbox#bulk' 

回答

0

有此控制器沒有搜索方法,我看到的唯一的搜索是Inbox.search通話。

要進行調試,請從實際執行「單擊」的視圖開始。該點擊是否真的應該觸發InboxController中的操作?如果你認爲它應該,爲什麼控制器中沒有任何動作?如果沒有,那麼「點擊」就是要去另一個實際上會處理搜索操作的控制器,在這種情況下,你需要弄清楚爲什麼「點擊」試圖調用InboxController中的方法而不是所需的控制器。這個問題可能是你的觀點或你的路線中的某些東西,或者你真的應該在你的InboxController中有這種方法,無論哪種方式,我建議你試着弄清楚至少應該發生什麼,然後發佈一些更多的代碼,說明你的想法應該發生的事情與真正發生的事情。

+0

因此,當我在控制器中定義一個不同的搜索方法時,它會顯示一條不同的錯誤消息。我只是在控制器中的索引方法中添加了代碼。我無法弄清楚。你可以幫我嗎? –

+0

發佈您的查看代碼,也可能是您的路線 – nPn

+0

您能否請現在檢查? –