안녕하세요 저는 지난 8 개월 동안 레일스를 해킹하고 있으므로 여러 가지 사실을 이해하지 못합니다. 나는 current_user 등을 설정하는 도우미 메서드를 보았고 사용했다. 그리고 지금 비슷한 것을 복제하려고 시도하고있다.레일스가 세션 변수를 할당합니다.
사용자가있는 현재 회사의 응용 프로그램 컨트롤러에 전역 값을 설정하려고합니다. 내가 잘못하고 있음을 알고 있지만 해결 방법을 알아 내지 못합니다. 올바르게 접근하고 있어요. 사용자가 회사를 클릭하면 글로벌 변수가 회사의 ID로 설정됩니다. 그런 다음 다른 하위 모델에서 회사에 대한 정보를 원하면 전역 변수를 사용하여 해당 ID를 사용하여 회사 개체를 검색하십시오. 문제를 일으키는
코드는 내가 컨트롤러 등 회사를 사용하지만있을 때이 작동 application.html.erb
<li><%= link_to "Company", company_path, :method => :get %></li>
내 네비게이션 바에 나는 다른 컨트롤러 I을 사용하려고 할 때 '
오류를 받고 있어요ActionController :: UrlGenerationError 종업원의 # 지수
나는 회사 id 매개 변수가 전달되지 않으므로 URL을 렌더링 할 수 없다는 것을 이해합니다.
다른 프로젝트에서 (current_user를 가져 오기 위해) 사용한 도우미 메서드를 해킹하려했지만 세션을 사용하여 user.id를 추출하여 사용자 개체를 반환한다는 것을 깨달았습니다. 여기에 회사 ID가 매개 변수로 전달되지 않는 한 나의 방법은 위의 쓸모가 있도록 내가 세션에서 현재의 회사를 얻을 수 아니에요 application_controller.rb
def current_company
@company = Company.find_by_id(params[:id])
end
에서 도우미 메서드에서 내 시도이다. 나는 모든 하위 모델 방법에 회사 ID를 전달 대해 생각했습니다
하지만
- 나는이 작업을 수행하는 방법을 100 % 확실하지 않다
- 그것은 매우 효율적 소리가 나지 않는다
내 질문에 올바르게 접근하고 있습니까? 최선의 방법은 무엇입니까? 사용자가 회사에 액세스하고 다른 모델에서 검색 할 수있게되면 글로벌 회사 ID 변수를 저장하는 도우미 메서드를 만들 수 있습니까?
설명이 너무 많아서 설명이나 추가 정보가 필요하면 알려주세요. 보고 주셔서 감사합니다.
편집 한
제작 루비 레이서 제안 변경하고 지금은이 :
application.html합니다.문이 잘했다 않는 current_company이 전무이기 때문에 ERB이 네비게이션 바에있는 링크를 표시하지 않습니다
<%unless current_page?(root_path)||current_page?(companies_path)||current_company.nil? %>
<li><%= link_to "Company", company_path, :method => :get %></li>
, 내가 가정 (다른 두 내가 current_company.nil를 추가하기 전에?
내가하고 있어요
companies_controller.rb에서 current_company
before_action :set_company, only: [:show, :edit, :update, :destroy, :company_home]
def company_home
current_company = @company
respond_with(@company)
end
application_controller.rb
def current_company=(company)
session[:current_company] = company.id
puts "The current_company has been assigned"
puts params.inspect
end
def current_company
@company = Company.find_by_id(session[:current_company])
puts "The current_company helper has been called"
puts @company
puts params.inspect
end
내가 뭔가 잘못하고 있습니까?
편집 2
나는이 작동하지 않는 이유를 모르겠어요. 위의 편집을 마치면 session[:company_id]
이 할당되지 않은 것처럼 보이므로 current_company
도우미 메서드가 nil을 반환합니다. 세션 매개 변수 puts session.inspect
인쇄를 시도했지만 company_id 정보를 찾을 수 없습니다. 왜 값을 할당하지 않는지 아무도 모른다.
편집
3 내 인생이 잘못 무슨 일이 일어나고 있는지 알아낼 수 없습니다하십시오. 회사 객체를 주어진되고있는 company_home
방법 (I 아래의 콘솔 출력에서 볼 수
def company_home
puts "Test the current company"
puts "#{@company.id} #{@company.name}"
puts params.inspect
end
private
def set_company
@company = Company.find_by_id(params[:id])
if @company.nil?||current_user.organisation_id != @company.organisation.id
flash[:alert] = "Stop poking around you nosey parker"
redirect_to root_path
else
current_company = @company
end
end
: 지금은 다음과 같습니다 companies_controller.rb
에 set_company
방법에 current_company = @company
이동 등의 여러 가지를 시도했습니다) 그러나 current_company
할당은 일어나지 않습니다. 여기서 라인 The current_company helper has been called
아래 puts @company
무언가를 출력한다 빈 행이 거기에, 상기 기준
Started GET "/company_home/1" for 80.55.210.105 at 2014-12-19 10:26:49 +0000
Processing by CompaniesController#company_home as HTML
Parameters: {"authenticity_token"=>"gfdhjfgjhoFFHGHGFHJGhjkdgkhjgdjhHGLKJGJHpDQs6yNjONwSyTrdgjhgdjgjf=", "id"=>"1"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 6 ORDER BY "users"."id" ASC LIMIT 1
Company Load (0.3ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = 1 LIMIT 1
Organisation Load (0.3ms) SELECT "organisations".* FROM "organisations" WHERE "organisations"."id" = $1 LIMIT 1 [["id", 6]]
Test the current company
1 Cine
{"_method"=>"get", "authenticity_token"=>"gfdhjfgjhoFFHGHGFHJGhjkdgkhjgdjhHGLKJGJHpDQs6yNjONwSyTrdgjhgdjgjf=", "controller"=>"companies", "action"=>"company_home", "id"=>"1"}
Rendered companies/company_home.html.erb within layouts/application (0.1ms)
Company Load (0.6ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" IS NULL LIMIT 1
The current_company helper has been called
{"_method"=>"get", "authenticity_token"=>"gfdhjfgjhoFFHGHGFHJGhjkdgkhjgdjhHGLKJGJHpDQs6yNjONwSyTrdgjhgdjgjf=", "controller"=>"companies", "action"=>"company_home", "id"=>"1"}
CACHE (0.0ms) SELECT "organisations".* FROM "organisations" WHERE "organisations"."id" = $1 LIMIT 1 [["id", 6]]
Completed 200 OK in 280ms (Views: 274.0ms | ActiveRecord: 1.7ms)
대한 콘솔 출력이다. 이것은 current_company 메소드가 아무 것도 반환하지 않는다는 것을 의미합니다.
또한 companies_controller의 company_home
메서드에서 puts "#{@company.id} #{@company.name}"
을 puts "#{current_company.id} #{current_company.name}"
으로 변경하면 오류가 발생합니다.
def current_company=(company)
이 세션 매개 변수를 지정하지 않는 이유가 누구에게 있습니까?감사합니다
최종 편집
나는 아무 생각 왜했습니다 없지만,이 관련된 문제가 나타납니다 :이 호출되지 없구요 것처럼
def current_company=(company)
session[:current_company] = company.id
puts "The current_company has been assigned"
puts params.inspect
end
그것은 보인다. 나는 전에 이런 것을 사용 해본 적이없는 이유를 이해하지 못합니다.
답변에 답을 달아 드리겠습니다.
예, 소환되는'세션 주위에 액세스 할 수 있습니다 ]' –
'session [: company_id]'로 변경했지만 여전히 작동하지 않습니다. –
'rails_root/config/initializers/session_store.rb' 파일이 있습니까? 그렇다면 주석 처리되지 않은 행이 있습니까? –