私はこれに丸一日を費やしました。
postgresql db の 1 つのフィールドにパーミッションを保存します。ここで、値は「roseburg、kfc、kcpl」です。これを分割して、クエリで * プラント ID が ('roseburg', 'kfc', 'kcpl') のエンジンから選択されるようにします。
def fnc_user_permissions <br/>
temp_var = current_user.permissions.split(",")
sql_perms = String.new
# "perm1", "perm2", "perm3"
temp_var.each do |pm|
sql_perms += (sql_perms.blank? ? pm : "', '" + pm)
end
@engines = Engine.where("plant_id in (:plant_id)", {:plant_id => sql_perms })
@engines = @engines.order("name")
end
「Engine.where」は 2 番目の「一重引用符」を追加するため、取得する代わりに
select * from engines where plant_id in ('roseburg', 'kfc', 'kcpl')
私は得る
select * from engines where plant_id in ('roseburg'', ''kfc'', ''kcpl')
各ループをこれに編集すると
sql_perms += (sql_perms.blank? ? pm : ", " + pm)
私は得る
select * from engines where plant_id in ('roseburg, kfc, kcpl')
私はついにこれをしなければなりませんでした:
temp_var = current_user.permissions.split(",")
sql_perms = String.new
# "perm1", "perm2", "perm3"
temp_var.each do |pm|
sql_perms += (sql_perms.blank? ? pm : "', '" + pm)
@engines = Engine.find_by_sql("select * from engines where plant_id in ('#{sql_perms}') ")
それは機能しますが、私は.whereコードを使用したいと思います.whereを作成する方法に関するアイデアはありませんか?さすがマイクロソフト!
ティーダブ